题目描述
统计一个数字在排序数组中出现的次数。
class Solution {
public:
//这个方法实际复杂度为O(n)
//应该采用二分搜索,找到第一个和最后一个k
int GetNumberOfK(vector<int> data ,int k) {
int size = data.size();
if (size == 0)
return 0;
int start = 0;
int end = size - 1;
while (start <= end)
{
int mid = (start + end) >> 1;
if (data[mid] < k)
start = mid + 1;
else if (data[mid] > k)
end = mid - 1;
else if (k == data[mid])
{
int result = 1;
int pos = mid;
while (++pos < size && k == data[pos])
++result;
pos = mid;
while (--pos >= 0 && k == data[pos])
++result;
return result;
}
}
return 0;
}
};