题目描述:
统计一个数字在升序数组中出现的次数。
输入:
[1,2,3,3,3,3,4,5],3
输出:
4
解法1:暴力法
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
auto pos=equal_range(data.begin(), data.end(),k);
return pos.second-pos.first;
}
};
解法2:二分法
class Solution {
public:
//二分法
int GetNumberOfK(vector<int> data ,int k) {
int low=0,high=data.size()-1;
if(high==-1)return 0;//data为空
while(low<=high){
int mid=low+(high-low)/2;
if(data[mid]>k)high=mid-1;// 中间的数字大于k 则右边左移
else if(data[mid]<k) low=mid+1;
else{
//已经找到
int count=0;
count++;
int index=mid-1;
while(index>=0&&data[index]==k){
count++;
index--;
}
index=mid+1;
while(index<=data.size()-1&&data[index]==k){
count++;
index++;
}
return count;
}
}
return 0;
}
};