AcWing 67. 数字在排序数组中出现的次数
原题链接
简单
作者:
adamXu
,
2020-10-01 22:59:37
,
所有人可见
,
阅读 402
class Solution {
public:
int getNumberOfK(vector<int>& nums , int k) {
//二分思想,右边的数都大于等于k,左边都小于k,
//先找到最右边的k下标,在找到最左边的k下标,两个减一下就好了
//注意一个 l + r >> 1 , l+ r +1 >> 1
if(nums.empty()) return 0;
int l = 0,r = nums.size() - 1;
//找最左边的数
while(l < r){
int mid = l + r >> 1;//[l,mid] , [mid + 1,r]
if(nums[mid] < k) l = mid + 1;
else r = mid;
}
if(nums[l] != k) return 0; //别忘了
int left = l;
//最右边的数
l = 0,r = nums.size() - 1;
while(l < r){
int mid = l + r + 1 >> 1;//[l,mid - 1],[mid,r]
if(nums[mid] <= k) l = mid;
else r = mid - 1;
}
return r - left + 1;
}
};