统计一个数字在排序数组中出现的次数。
例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。
样例 输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3
输出:4
考虑二分来解决;标准二分,如果有重复值;返回的是最左边的元素下标;我们可以再次找寻key+1;这样,二者相减就得到key出现的次数;
当然我们也可以重新改写二分;当有重复值时候,使其找寻最右边的元素下标;
public int getNumberOfK(int[] nums, int K) {
int first = binarySearch(nums, K);
int last = binarySearch(nums, K + 1);
return (first == nums.length || nums[first] != K) ? 0 : last - first;
}
private int binarySearch(int[] nums, int K) {
int l = 0, h = nums.length;
while (l < h) {
int m = l + (h - l) / 2;
if (nums[m] >= K)
h = m;
else
l = m + 1;
}
return l;
}```