题目描述
统计一个数字在升序数组中出现的次数。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int first=binaryseachfirst(data,0,data.size()-1,k);
int last=binaryseachlast(data,0,data.size()-1,k);
if(first==-1&&last==-1) return 0;
return last-first+1;
}
int binaryseachfirst(vector<int>& data,int l,int r,int key){
while(l<=r){//等号就带上吧
int mid=l+((r-l)>>2);
if(data[mid]>key){
r=mid-1;
}else if(data[mid]<key){
l=mid+1;
}else{
if(mid==l||data[mid-1]!=key){//直接找到左边界
return mid;
}else{
r=mid-1;
}
}
}
return -1;
}
int binaryseachlast(vector<int>& data,int l,int r,int key){
while(l<=r){
int mid=l+((r-l)>>2);
if(data[mid]>key){
r=mid-1;
}else if(data[mid]<key){
l=mid+1;
}else{
if(mid==r||data[mid+1]!=key){//找到右边界
return mid;
}else{
l=mid+1;
}
}
}
return -1;
}
};