二分查找
时间复杂度 O(logn)
前提: 数组是 有序的
1、二分模板
// 确定左右端点(二分范围)
int l = 左端点,r = 右端点;
int ans = 初始化;
while(l<=r){
// 1、找中间值
int mid=(l+r)/2;
// 2、比较查找到中间元素和目标元素的大小
if( ){ // 符合条件的情况
ans=mid; // 答案更新为 mid
// 缩小范围 画图!判断缩小左边界还是右边界
// l=mid+1; r=mid-1;
}
else{
// 缩小范围 和上一个反过来
// r=mid-1; l=mid+1;
}
}
3、lower_bound 和 upper_bound