題目描述
統計一個數字在排序數組中出現的次數。
分析
實現二分查找的upper函數和lower函數
代碼實現
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()<=0)
return 0;
int a=lower( data , k, 0, data.size()-1);
if(a==-1)
return 0;
int b=upper( data , k, 0, data.size()-1);
return b-a+1;
}
int upper(vector<int> &data ,int k, int start, int end){
if(start == end ){
if(data[end] == k)return end;
else return -1;
}
int mid = (start + end)/2;
if( data[mid] > k )return upper( data , k , start, mid);
if( data[mid] < k )return upper( data , k , mid+1, end);
if( data[mid] == k ){
if( mid<end&&data[mid+1]!=k )
return mid;
else
return upper( data , k , mid+1, end);
}
return -1;
}
int lower(vector<int> &data ,int k, int start, int end){
if(start == end ){
if(data[end] == k)return end;
else return -1;
}
int mid = (start + end)/2;
if( data[mid] > k )return lower( data , k , start, mid);
if( data[mid] < k )return lower( data , k , mid+1, end);
if( data[mid] == k ){
if( mid>start&&data[mid-1]!=k )
return mid;
else
return lower( data , k , start, mid);
}
return -1;
}