首页 > 其他 > 详细

Binary Search

时间:2020-07-30 00:17:51      阅读:126      评论:0      收藏:0      [点我收藏+]

二分查找

在闭区间查找[begin,end],注意对找不到的处理

int binary_find(vector<int>& nums, int target){
    int l=0,r=nums.size()-1;//Notice
    while(l<r){
        int mid=l+(r-l)>>1;
        if(nums[mid]==target)return mid;
        else if(nums[mid]>target)r=mid-1;
        else l=mid+1;
    }
    return nums[l]==target?l:-1;
}

二分搜索

  1. 在[begin,end)查找,故格外注意边界
  2. 满足条件时右不变,不满足时左加一
  3. 注意变式如求上界(注释部分)
int upper_bound(vector<int>& nums, int target){
    int l=0,n=nums.size();//Notice
    int r=n;
    while(l<r){
        int mid=l+(r-l)>>1;
        if(nums[mid]>target)r=mid;
        else l=mid+1;
    }
    if(r==n)return -1;
    if(nums[l]!=target)return -1;
    else return l;
    /*
    if(l==0)return -1;
    if(nums[l-1]!=target)return -1;
    else return l-1;    
    */
}
int lower_bound(vector<int>& nums, int target){
    int l=0,n=nums.size();//Notice
    int r=n;
    while(l<r){
        int mid=l+(r-l)>>1;
        if(nums[mid]>=target)r=mid;
        else l=mid+1;
    }
    if(r==n)return -1;
    if(nums[l]!=target)return -1;
    else return l;
}

Binary Search

原文:https://www.cnblogs.com/chanceYu/p/13400126.html

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