上一篇博客中简单的使用了二分查找法在数组中找num。
在这篇博客中,会根据上次的二分查找再次提升一些难度,在数组中找到大于等于num的最左端的位置。
举例:在有序数组 [0,0,1,1,1,2,2,4,5,6,7,8,9,9]中,找到 >=2的最左端的数。肉眼观察,应该是数组下标为5的位置。
那么,如何使用二分查找来实现呢?
public static int findMostLeftNoLessNumIndex(int[] arr, int num) {
if (arr == null || arr.length == 0) {
return -1;
}
int start = 0;
int end = arr.length - 1;
int t = -1;
while (start <= end) {
int middle = (start + end) / 2;
//如果中间位置数刚好 >= num,那么代表右边的所有数都会比num大,
//所以舍弃右边的数,从左边再次查找
if (arr[middle] >= num) {
t = middle;
end = middle - 1;
} else {
//如果middle < num,说明左侧数都会比num小,同理,从右侧查找
start = middle + 1;
}
}
return t;
}
还可以练习查找<=num中最右端的数。