首页 > 其他 > 详细

二分查找总结

时间:2021-08-23 08:48:20      阅读:24      评论:0      收藏:0      [点我收藏+]
//先看ans赋值和谁(r=mid-1或者l=mid+1)在一起
//如果和l=mid+1在一起,说明是寻找当前判断条件的最后一个 
//如果和r=mid-1在一起,说明是寻找当前判断条件的第一个
//上面说的当前判断条件,需要看清楚ans赋值是在if还是在else里,如果在else里,要取if的反条件

int bs4 (int target, int nums[], int len) {
    int l=0, r=len-1;
    int ans = -1;
    while(l <= r) {
        int mid = (l+r) >> 1;
        if(nums[mid] < target) {
            ans = mid; // ans赋值和l=mid+1在一起,说明是寻找最后一个。在条件是nums[mid]<target里,所以是寻找<target的最后一个
            l = mid + 1;
        }
        else
            r = mid - 1;
    }
    return ans;
}

int bs5 (int target, int nums[], int len) {
    int l=0, r=len-1;
    int ans = -1;
    while(l <= r) {
        int mid = (l+r) >> 1;
        if(nums[mid] < target)
            l = mid + 1;
        else {
            ans = mid; // ans赋值和r=mid-1在一起,说明是寻找第一个。在条件是nums[mid]>=target里,所以是寻找>=target的第一个
            r = mid - 1;
        }
    }
    return ans;
}

  

二分查找总结

原文:https://www.cnblogs.com/maji233/p/15173916.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!