排序数组中查找数字的个数
二分查找目标数字的右边界+1的index以及比目标数字少1的数字的右边界+1,两者相减即为数字的个数
public class Solution {
public int search(int[] nums, int target) {
return find(nums, target) - find(nums, target-1);
}
private int find(int[] nums, int target) {//找比target大1的元素的位置,不存在就返回两个边界之一
int i = 0;
int j = nums.length-1 ;
while (i<=j) {
int mid = (i+j)/2;
if(nums[mid] <= target) {
i = mid+1;// 保证了i一定是大于target的第一个元素
} else {
j = mid-1 ;
}
}
return i;
}
}
浙公网安备 33010602011771号