统计一个数字在排序数组中出现的次数。
class Solution {
public:
int GetNumberOfK(vector<int> v ,int k) {
int len=v.size(),c=0;
if(len==0)return 0;
int first=binarySearchFirst(v,k,0,len-1);
int last=binarySearchLast(v,k,0,len-1);
if(first!=-1 && last!=-1)
return last-first+1;
else
return 0;
}
int binarySearchFirst(vector<int>&v,int k,int l,int r){
if(l>r)return -1;
//bool flag=v[l]<=v[r]?1:0;
int mid=l+(r-l)/2;
if(v[mid]==k){
if(l==mid || v[mid-1]!=k)
return mid;
else
r=mid-1;
}
else{
if(v[mid]>k)
r=mid-1;
else
l=mid+1;
}
return binarySearchFirst(v,k,l,r);
}
int binarySearchLast(vector<int>&v,int k,int l,int r){
if(l>r)return -1;
//bool flag=v[l]<=v[r]?1:0;
int mid=l+(r-l)/2;
if(v[mid]==k){
if(r==mid || v[mid+1]!=k)
return mid;
else
l=mid+1;
}
else{
if(v[mid]>k)
r=mid-1;
else
l=mid+1;
}
return binarySearchLast(v,k,l,r);
}
};