查找小于等于目标值的数的个数:
private int upperBound(int[] arr, int low, int high, int target) {
int ans = high + 1;
while (low <= high) { // 注意这里条件是小于等于
int mid = (low + high) >> 1; // 防溢出
if (arr[mid] > target) { // 这里条件是严格大于,和下面查严格小于目标值的个数有区别
ans = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
return ans;
}
查找严格小于目标值的数的个数
private int lowerBound(int[] arr, int low, int high, int target) {
int ans = high + 1;
while (low <= high) { // 注意这里条件是小于等于
int mid = (low + high) >> 1; // 防溢出
if (arr[mid] >= target) { // 这里条件是大于等于
ans = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
return ans;
}
出自leetcode题解:在既定时间做作业的学生人数(方法三)