题目描述
统计一个数字在排序数组中出现的次数。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int right = GetLastNumK(data,k);
//int right = GetLastNumK2(data,k,0,data.size()-1);
int left = GetFirstNumK(data,k);
return right - left + 1;
}
int GetLastNumK(vector<int> data ,int k) {
int l = 0,r=data.size()-1;
int mid;
while(l<=r){
mid = (l+r)/2;
if(data[mid]<=k){
l=mid+1;
}else{
r=mid-1;
}
}
return r;
}
//递归版本
int GetLastNumK2(vector<int> data ,int k,int l ,int r) {
if(l<=r) {
int mid = (l+r)/2;
if(data[mid]<=k){
return GetLastNumK2(data,k,mid+1,r);
}else{
return GetLastNumK2(data,k,l,mid-1);
}
}
return r;
}
int GetFirstNumK(vector<int> data ,int k) {
int l = 0,r=data.size()-1;
int mid ;
while(l<=r){
mid = (l+r)/2;
if(data[mid]<k){
l=mid+1;
}else{
r=mid-1;
}
}
return l;
}
};