upper_bound和lower_bound的二分查找底层实现

lower_bound(下界,上界,目标值)找到不小于目标值的位置,即大于等于

while(left<right){
  int mid=left+(right-left)/2;//查找区间[left,right)
  if(target<nums[mid]){
      left=mid+1;  
    }else{
      right=mid;  
    }                    
}
return left;    

upper_bound(下界,上界,目标值)找到大于目标值的位置

while(left<right){
  int mid=left+(right-left)/2;//查找区间[left,right)
  if(target<=nums[mid]){
    left=mid+1;        
    }else{
     right=mid; 
  }            
}
return left;

 以上都是查找一个大于或者>=目标值的,所以查找的范围都是[left,right);

如果是查找范围是[left,right]则lwhile条件里可以是left==right,要二分查找一个数while条件就要满足left==right也可以。

posted @ 2023-05-14 21:31  iu本u  阅读(35)  评论(0)    收藏  举报