二分查找(已排序)
public static boolean exist(int[] sortedArr, int num) {
if(sortedArr == null || sortedArr.length == 0) return false;
int L = 0;
int R = sortedArr.length - 1;
int mid = 0;
while (L < R) {
mid = L + ((R-L) >> 1);
if(sortedArr[mid] == num) return true;
else if(sortedArr[mid] > num) R = mid - 1;
else L = mid + 1;
}
return sortedArr[L] == num;
}
二分查找最左值(已排序)
public static int nearestIndex(int[] arr, int num) {
int L = 0;
int R = arr.length - 1;
int index = -1;
while (L <= R) {
int mid = L + ((R-L) >> 1);
if(arr[mid] >= num) {
index = mid;
R = mid - 1;
}
else L = mid + 1;
}
return index;
}
二分查找任意一个最小值(未排序)
public static int getLessIndex(int[] arr) {
if(arr == null || arr.length == 0) return -1;
if(arr.length == 1 || arr[0] < arr[1]) return 0;
if(arr[arr.length - 1] < arr[arr.length - 2]) return arr.length - 1;
int left = 1;
int right = arr.length - 2;
int mid = 0;
while (left < right) {
mid = left + ((right-left) >> 1);
if(arr[mid] > arr[mid - 1]) {
right = mid - 1;
} else if (arr[mid] > arr[mid + 1]){
left = mid + 1;
} else {
return mid;
}
}
return left;
}