几种二分查找的对比

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语句。

我之所以专门写了个博客,不是因为二分多难,而是因为二分很容易写错

 

 

 
posted @ 2021-09-17 22:57  vctgo  阅读(73)  评论(0)    收藏  举报