55.数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。
例如输入排序数组 [1,2,3,3,3,3,4,5] 和数字 3,由于 3 在这个数组中出现了 4 次,因此输出 4。
数据范围:
数组长度 [0,1000]。
样例:
输入:[1, 2, 3, 3, 3, 3, 4, 5], 3
输出:4
代码:
class Solution {
public int getNumberOfK(int[] nums, int k) {
//处理空数组情况
if(nums.length == 0)return 0;
//第一次二分查找:寻找k的起始位置(左边界)
int l1 = 0,r1 = nums.length-1;
while(l1<r1){
//计算中间位置
int mid = l1+r1>>1;
//如果中间值大于等于k,调整右指针
if(nums[mid]>=k)r1 = mid;
//否则调整左指针
else l1 = mid+1;
}
//第二次二分查找:寻找k的结束位置(右边界)
int l2 = 0,r2 = nums.length-1;
while(l2<r2){
//计算中间位置
int mid = (l2+r2+1)>>1;
//如果中间值小于等于k,调整左指针
if(nums[mid]<=k)l2 = mid;
//否则调整右指针
else r2 = mid-1;
}
//如果左右边界都不等于k,说明数组不存在k
if(nums[l1]!=k&&nums[l2]!=k)return 0;
//否则返回k出现的次数
else return l2-l1+1;
}
}

浙公网安备 33010602011771号