You need to write it over and over again
Find the first number bigger than target
/**
* return the first number bigger than target
*
* @param nums 0, 1, 2, 3, 4, 5, 6, 7
* @param target 5
* @return 6
*/
private int binarySearchTargetRight(int[] nums, int target) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] > target) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
Find the last number smaller than target
/**
* return the last number smaller than target
*
* @param nums 0, 1, 2, 3, 4, 5, 6, 7
* @param target 5
* @return 4
*/
private int binarySearchTargetLeft(int[] nums, int target) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = l + r + 1 >> 1;
if (nums[mid] < target) {
l = mid;
} else {
r = mid - 1;
}
}
return l;
}
Top comments (0)