一、查詢已遞增排序陣列a中大於等於(或者大於)給定target的第乙個元素的下標
//當eq_enable為true時 對應【大於等於】的情況
//當eq_enable為false時 對應【大於】的情況
intbinarysearch_ge_or_g
(vector<
int>
& a,
int target,
bool eq_enable)
else
}return ans;
}
//若ans等於a.size()說明沒有找到滿足條件的值二、查詢已遞增排序陣列a中小於等於(或者小於)給定target的最後乙個元素的下標
//當eq_enable為true時 對應【小於等於】的情況
//當eq_enable為false時 對應【小於】的情況
intbinarysearch_le_or_l
(vector<
int>
& a,
int target,
bool eq_enable)
else
}return ans;
}
同樣,若ans等於a.size()說明沒有找到滿足條件的值。此外,**2和**1十分相似,可以對比學習總結:
第一次看上面的**可能會覺得比較奇怪,多思考幾種不同的情形做遍歷就能夠熟悉了,核心思想為:
判斷mid是否滿足條件,和確定下乙個可疑區是[left,mid-1] 還是 [mid+1,right],經過不斷地重複mid判斷和可疑區長度減半,最終就能實現找點的功能了。
擴充套件
作為練習,感興趣的讀者可以試試實現一下以下兩個需求:
三、查詢已遞減排序陣列a中小於等於(或者小於)給定target的第乙個元素的下標
四、查詢已遞減排序陣列a中大於等於(或者大於)給定target的最後乙個元素的下標
二分查詢模板
二分查詢也稱折半查詢 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 對...