2.求最大的i,使得a[i] = key;
對於1的演算法,就是l邊界(左邊界)一直不滿足條件,r邊界在快結束時一定滿足條件,所以最後輸出r,然後區間不斷向左收,右邊界r不動。
對於2,就是l左邊界一直不動,縮小右邊界,最後輸出左邊界,要注意的是向上取整。
對於不下降序列a,n為序列a元素的個數,key為關鍵字:
1.求最小的i,使得a[i] = key,若不存在,則返回-1
int binary_search_1(int a, int n, int key)
if (a[r] == key)
return r;
return -1;
}2.求最大的i,使得a[i] = key,若不存在,則返回-1
int binary_search_2(int a, int n, int key)
if (a[l] == key) return l;
return -1;
}
二分法查詢的邊界問題
對於不下降序列a,n為序列a元素的個數,key為關鍵字 1.求最小的i,使得a i key,若不存在,則返回 1 int binary search 1 inta,intn int key if a r key returnr return 1 2.求最大的i,使得a i key,若不存在,則返回 ...
二分法的邊界選擇
要在有序陣列中找某個數,這個數隻出現一次 這個寫法有三個點需要注意 int find int x,int a,int begin,int end else if a m x else return 1 intmain cout find 0 a,0,9 endl cout find 5 a,0,9 ...
二分法尋找左右邊界
尋找左邊界 陣列有序,且有重複 左閉右開 迴圈條件 left right 中間位置計算 mid left right left 1 左邊界更新 left mid 1 右邊界更新 right mid 返回值 nums left target left 1public static void main ...