從乙個有序陣列中找到乙個符合要求的精確值(如猜數遊戲)。如查詢值為key的元素下標,不存在返回-1。
//這裡是left<=right。
//考慮這種情況:如果最後剩下a[i]和a[i+1](這也是最容易導致導致死迴圈的情況)首先mid = i,
//如果a[mid] < key,那麼left = mid+1 = i +1,如果是小於號,則a[i + 1]不會被檢查,導致錯誤
int left = 1,right = n;
while(left <= right)
return -1;
這種通常題目描述為滿足某種情況的最小的元素。
int left = 1,right = n;
while(left < right)
這種通常題目描述為滿足某種情況的最大的元素。如leetcode69題,求sqrt(x)向下取整就是這種模板。
int left = 1, right = n;
while(left < right)
最後兩種情況的迴圈跳出條件是left查詢精確值,迴圈條件是小於等於;查詢滿足情況的最大最小值,迴圈條件是小於。
查詢滿足條件的最大數,mid = (right + left + 1) / 2;查詢滿足條件的最小數,mid = (right + left)/2
mid = left + (right - left) / 2,不是適用於所有的情況。
如果存在沒有解的情況,比如從[1,2,3,4,5]找出大於等於6的第乙個數,我們只需要將最後剩下的數單獨進行一次判斷就可以了。
二分查詢模板
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。模板一當區間 l,r 的更新操作是r mid l mid 1 時,計算mid時不需要加1。int bsearch 1 in...
二分查詢模板
例如陣列中查詢乙個數 二分查詢的前提是整個陣列是有序的 模板 int a n int l 0,r n 1 int mid,key while l r 另外還有一些二分查詢函式 a.函式模板 binary search arr,arr size indx c.函式功能 在陣列中以二分法檢索的方式查詢,...
二分查詢模板
二分查詢模板總共有兩個 將區間分為 l,mid l,mid l,mid mid 1,r mid 1,r mid 1 r 時,如下 while l r else 將區間分為 l,mid 1 l,mid 1 l,mid 1 mi d,r mid,r mid,r 時,如下 while l r else 對...