题目描述
统计一个数字在排序数组中出现的次数。
思路:
二分法,先找到那个数字,然后往两边扩。
代码
class Solution{
public:
int GetNumberOfK(vector<int> data, int k)
{
if(data.size()==0) return 0;
int len=data.size();
int locate=0,count=0;
locate=wherenum(data,k); //locate是他的下标值
if(locate==-1) return 0;
int l=locate-1,r=locate+1;
while(l>=0 || r<len)
{
if(data[l]==k)
{
l--;
count++;
}
if(data[r]==k)
{
r++;
count++;
}
if(data[l]!=k && data[r]!=k)
break;
}
return count;
}
}
private:
int wherethenum(vector<int> num, int k)
{
int start=0;
int endnum=num.size()-1;
while(start<=endnum)
{
int mid=(start+endnum)/2;
if(num[mid]==k) return mid;
else if(num[mid]>k) endnum=mid-1;
else start=mid+1;
}
return -1;
}