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也可以。