AcWing 67. 数字在排序数组中出现的次数
原题链接
简单
作者:
尼古拉斯小布丁
,
2021-04-14 07:56:32
,
所有人可见
,
阅读 222
先查找该数在在最左边的位置,再查找该数在最右边的位置
class Solution {
public:
int getNumberOfK(vector<int>& nums , int k) {
if(nums.empty()) return 0;
int l =0, r= nums.size()-1;
while(l<r){ //模板1,将[l, r]分为[l, mid]和[mid+1, r]
int mid = l+r>>1;
if(nums[mid]<k) l = mid+1;
else r = mid;
}
int left = l;
if(nums[left]!=k) return 0; //没有找到k
// printf("%d\n",left);
l=0, r = nums.size()-1;
while(l<r){ //模板2,将[l, r]分为[l,mid-1]和[mid, r]
int mid = l+r+1>>1;
if(nums[mid]<=k) l=mid;
else r = mid-1;
}
// printf("%d\n",r);
return r-left+1;
}
};