L2_二分查找
binary search 模板
//first occurrence of target
int binarySearch(vector<int> &A, int target){
if(A.size()==0){
return -1;
}
int start=0;
int end=A.size()-1;
int mid;
while(start+1<end){
mid=start+(end-start)/2;
if(A[mid]==target)
end=mid;
else if(A[mid]>target)
end=mid; //不用mid+1之类
else
start=mid;
}
//Mid不变,所以最后需要分别判断
if(A[start]==target)
return start;
if(A[end]==target)
return end;
return -1;
}核心区别
方法
返回值位置
当元素存在时
当元素不存在时
相等元素处理
面试中如何选择
使用 bisect_left 的情况
bisect_left 的情况使用 bisect_right 的情况
bisect_right 的情况记忆技巧
Last updated