二分查找
public int binarySearch(int[] arr, int l, int r, int target) {
int left = l;
int right = r;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (arr[mid] == target)
return mid;
else if (arr[mid] > target)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
二分查找 大于等于target的最左侧位置
//找大于等于target的最左位置
private int findMostLeftIndex(int[] arr, int l, int r, int target) {
int left = l;
int right = r;
int index = 0;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (arr[mid] >= target) {
right = mid - 1;
index = mid;
} else {
left = mid + 1;
}
}
return index;
}
二分查找 小于等于target的最右位置
//小于等于target的最右位置
private int findMostRightIndex(int[] arr, int l, int r, int target) {
int left = l;
int right = r;
int index = 0;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (arr[mid] <= target) {
left = mid + 1;
index = mid;
} else {
right = mid - 1;
}
}
return index;
}