统计一个数字在排序数组中出现的次数。
class Solution {
//数组有序-----> 借助二分查找法
//找到第一个key 与 最后一个key
//利用两者下标的差+1 即求得key出现的次数
public:
int GetNumberOfK(vector<int> data ,int k) {
int len = data.size();
if(len < 1)
return 0;
int first = GetFirstOfK(data,k);
int last = GetLastOfK(data,k);
return last - first + 1;
}
int GetFirstOfK(vector<int> data ,int k){
int len = data.size();
int start = 0;
int end = len - 1;
int mid = (end + start)/2;
while(start <= end){
if(data[mid] < k){
start = mid + 1;
}
else
end = mid - 1;
mid = (end + start)/2;
}
return start;
}
int GetLastOfK(vector<int> data ,int k){
int len = data.size();
int start = 0;
int end = len - 1;
int mid = (end + start)/2;
while(start <= end){
if(data[mid] <= k){
start = mid + 1;
}
else
end = mid - 1;
mid = (end + start)/2;
}
return end;
}
};