题目描述
统计一个数字在排序数组中出现的次数。
思路:可以使用暴力枚举,时间复杂度O(N),但肯定不是最优解
思路二:因为数组data是排好序的,可以利用这一信息,采用改进的二分查找,找到值为Key的最小索引下标index,然后往右搜索,统计出现次数,代码如下:
代码:
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int res = 1;
int n = data.size();
if(n == 0) return 0;
int left = 0;
int right = n-1;
int mid;
int cnt = 0;
while(left + 1 < right) {
mid = (left + right) / 2;
if(data[mid] >= k) {
right = mid;
} else {
left = mid + 1;
}
}
if(data[left] == k) cnt = left;
else if(data[right] == k) cnt = right;
else return 0;
while(++cnt < n && data[cnt] == k) {
++res;
}
return res;
}
};