题目:
统计数字在排序数组中出现的次数
思路:
二分查找找到位置,然后左右扩展
代码:
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.empty() || data[0] > k || data[data.size()-1] < k)
return 0;
int left = 0;
int right = data.size();
int middle = 0;
while(left < right)
{
middle = left + (right-left)/2;
if(data[middle] == k)
{
break;
}
else if(data[middle] < k)
{
left = middle+1;
}
else
{
right = middle-1;
}
}
if(data[middle] == k)
{
int index = middle;
int res = 0;
for (;data[index] == k && index>=0; --index)
{
++res;
}
for (index = middle + 1;data[index] == k && index<=data.size(); ++index)
{
++res;
}
return res;
}
return 0;
}
};