二分查詢演算法一鍋端

2021-10-07 13:22:21 字數 1662 閱讀 5803

1、分析二分查詢**時,不要出現 else,全部展開成 else if 方便理解。

2、注意「搜尋區間」和 while 的終止條件,如果存在漏掉的元素,記得在最後檢查。

3、如需定義左閉右開的「搜尋區間」搜尋左右邊界,只要在 nums[mid] == target 時做修改即可,搜尋右側時需要減一。

4、如果將「搜尋區間」全都統一成兩端都閉,好記,只要稍改 nums[mid] == target 條件處的**和返回的邏輯即可

5. 推薦使用mid = left + (right - left)/2 代替 mid = (left + right) / 2 ,就可以防止數字過大越界的情況。

第乙個,最基本的二分查詢演算法:
因為我們初始化 right = nums.length -

1所以決定了我們的「搜尋區間」是 [left, right]

所以決定了 while

(left <= right)

同時也決定了 left = mid+

1 和 right = mid-

1因為我們只需找到乙個 target 的索引即可

所以當 nums[mid]

== target 時可以立即返回

第二個,尋找左側邊界的二分查詢:

對於尋找左右邊界的二分搜尋,常見的手法是使用左閉右開的「搜尋區間」

因為我們初始化 right = nums.length

所以決定了我們的「搜尋區間」是 [left, right)

所以決定了 while

(left < right)

同時也決定了 left = mid +

1 和 right = mid

因為我們需找到 target 的最左側索引

所以當 nums[mid]

== target 時不要立即返回

而要收緊右側邊界以鎖定左側邊界

第三個,尋找右側邊界的二分查詢
因為我們初始化 right = nums.length

所以決定了我們的「搜尋區間」是 [left, right)

所以決定了 while

(left < right)

同時也決定了 left = mid +

1 和 right = mid

因為我們需找到 target 的最右側索引

所以當 nums[mid]

== target 時不要立即返回

而要收緊左側邊界以鎖定右側邊界

又因為收緊左側邊界時必須 left = mid +

1所以最後無論返回 left 還是 right,必須減一

right等於什麼,決定於求的是什麼,

如果是求左右界,通常是取length

rigth = length 對應著 while(left < right)

right = length -1 對應著 while(left <= right)

mid等於什麼,取決於左側和右側邊界是否為開區間,開區間那一邊就無需-1

如果是[left,right),left = mid - 1 & rigth = mid

大道至簡!二分查詢的細節也不過如此!

c語言判斷一鍋端

給大家分享一些c語言的對錯題,可以 固本培元 加深鞏固基礎概念的記憶。1資料是操作的物件,操作的結果會改變資料的狀況。對 2字元型變數用來存放字元常量,注意只能放2個字元。錯 3c語言中可以把乙個字串賦給乙個字元變數。錯 4在 c語言中的實型變數分為兩種型別,它們是 float 實型 和double...

面試演算法 排列組合子集一鍋端

方 看題五分鐘,不會做,看解析 先看中文站,再看國際站 選擇最優解析 回頭再來寫 面試四步走 和面試官,題目限制條件 說說可能解,選擇最優解 碼字 跑測試用例 思維要點 不要人肉進行遞迴 找到最近最簡方法,將其拆解成可重複解決的問題 重複子問題 數學歸納法思維 題目 給定一組不含重複元素的整數陣列 ...

AI獨角獸曠視回應裁員15 ,杭州分部一鍋端訊息

近日,有爆料稱,ai獨角獸曠視裁員15 杭州分部一鍋端,上午還在改bug,下午通知讓走人。n 1賠償正常給,所有檔案事先列印好,沒有協商餘地,簽字同時所有許可權關閉,並且每個人都被看著弄電腦,不允許拷貝檔案,動作整齊劃一流程短平快。對此,曠視科技回應稱,該訊息不實,如有都是正常年度業務調整。資料顯示...