1.寻找某个数
2.寻找某个边界
3.寻找。。。
似乎都是在寻找不同的东西对吧,实际上还是基于第一种的变式,即一种分界线和单调的思维。
// 在nums的数组中寻找target,寻找到了返回下标,为寻找到返回-1
int search(vector<int>& nums, int target) {
int l = 0,r = nums.size()-1;
while(l<=r){
int md = l + (r-l)/2;
if(nums[md]==target)return md;
else if(nums[md]>target)r = md - 1;
else l = md+1;
}
return -1;
}
可以看出代码很简单,如果换成第二种情况呢,也就是无法直接判断是否找到了目标,取巧一点,能不能加上判断下标减一是否符合答案,如果符合那就是需要更改第一个if语句。
我之所以专门写了个博客,不是因为二分多难,而是因为二分很容易写错
原文:https://www.cnblogs.com/vctgo/p/15306678.html