二分查找mid取值问题

在查找第一个等于target或者最后一个target的问题中

如果左边界更新为mid,即left = mid时,mid应该取(l + r + 1) >> 1

否则应该取(l + r) >> 1

 

Java模板:

寻找第一个

int l = 0;
int r = nums.length - 1;
        
while(l < r){
    int mid = l + (r - l >> 1);
    if(nums[mid] >= target) //向左找
        r = mid;
    else    // 向右找
        l = mid + 1;
}

查找最后一个

int l = 0;
int r = nums.length - 1;
        
while(l < r){
    int mid = l + (r + 1 - l >> 1);
    if(nums[mid] <= target) //向右找
        l = mid;
    else    // 向右找
        r = mid - 1;
}

  

  

posted @ 2022-04-03 20:28  Inami  阅读(102)  评论(0)    收藏  举报