public static int left_bound(int[] arr,int target) {
int left = 0;
int right = arr.length-1;
while(left<=right) {
int mid = left + ((right - left) >> 1);
if(arr[mid] == target) {
right = mid -1;
//如果mid刚好是最左侧的target,循环结束的条件是left = right+1,所以最终的结果就是left所在的位置。这就是结果为什么返回left的原因。
}
else if(arr[mid]>target) {
right = mid -1;
}
else if(arr[mid]<target) {
left = mid +1;
}
}
if((left>arr.length-1)||(arr[left]!=target)) {
return -1;
}
return left;
}
二分查找左边界问题
于 2022-03-01 16:09:55 首次发布