二分搜索边界判断
小于 1 分钟
二分搜索边界判断
取下边界,最左边的值
取大于等于target的值,左边界取l=mid+1时,中间值需要向下取整。
如果目标值不在搜索范围,则取比目标值大的值的最左界。
int findLower(int[] nums,int target)
{
int l=0,r=nums.length-1;
while(l<r){
int mid=l+(r-l)/2;
if(nums[mid]>=target){
r=mid;
}
else{
l=mid+1;
}
}
return l;
}
取小于等于target的值,取上边界,取最右边的值
右边界取r=mid-1时,mid需要向上取整。
int findUpper(int[] nums,int target){
int n=nums.length;
int l=0,r=n-1;
while(l<r){
int mid=l+(r-l+1)/2;
if(nums[mid]<=target){
l=mid;
}
else{
r=mid-1;
}
}
}
return l;