题目描述
统计一个数字在排序数组中出现的次数。
用二分查找
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k)
{
// if(data==null)return -1;
if(data.empty())
return 0;
int nums;
int start=0;
int end=data.size()-1;
int first=Getfirst(data,k,start,end);
int last=Getlast(data,k,start,end);
if(last>-1&&first>-1)
{
nums=last-first+1;
return nums;
}
else
return 0;
}
int Getfirst(vector<int> &data ,int k,int start,int end)
{
if(start>end)return -1;
int mid=(end+start)/2;
if(data[mid]==k)
{
if((mid>0&&data[mid-1]!=k)||mid==0)
return mid;
else
end=mid-1;
}
else if(data[mid]<k)
{
start=mid+1;
}
else
end=mid-1;
return Getfirst(data,k,start,end);
}
int Getlast(vector<int> &data ,int k,int start,int end)
{
if(start>end)return -1;
int mid=(end+start)/2;
if(data[mid]==k)
{
if((mid<end&&data[mid+1]!=k)||mid==end)
return mid;
else
start=mid+1;
}
else if(data[mid]<k)
{
start=mid+1;
}
else
end=mid-1;
return Getlast(data,k,start,end);
}
};