数字在排序数组中出现的次数
题目描述
统计一个数字在排序数组中出现的次数。
方法很多,最高效的是用二分查找上下界,结果就是上届减下届加一
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()==0){
return 0;
}
int left=0;
int right=data.size()-1;
int mid;
int low=0;
int up=0;
bool flag=true;
while(left<=right){
mid=(left+right)/2;
if(data[mid]==k){
if(flag){
if(mid==0||data[mid-1]!=k){
low=mid;
right=data.size()-1;
flag=false;
}else{
right=mid-1;
}
}else{
if(mid==(data.size()-1)||data[mid+1]!=k){
up=mid;
break;
}else{
left=mid+1;
}
}
}else if(data[mid]>k){
right=mid-1;
}else{
left=mid+1;
}
}
if(flag){
return 0;
}else{
return up-low+1;
}
}
};