题目描述
统计一个数字在排序数组中出现的次数
class Solution {
public:
//用两次二分找出数字的左边界和右边界
int GetNumberOfK(vector<int> data ,int k) {
if (data.size() == 0)
return 0;
int start = 0, end = data.size()-1;
while (start <= end)
{
int mid = (start + end) >> 1;
if (data[mid] < k)
start = mid + 1;
else
end = mid - 1;
}
//数字不存在
if (data[start] != k)
return 0;
int ans = start;
//小优化,因为已经找到数字左边界,所以第二次查找
//只需要重置右边界,左边界可以不需要从数组左边开始
end = data.size()-1;
while (start <= end)
{
int mid = (start + end) >> 1;
if (data[mid] > k)
end = mid - 1;
else
start = mid + 1;
}
ans = end - ans + 1;
return ans;
}
};