統計一個數字在排序數組中出現的次數。
class Solution {
//數組有序-----> 藉助二分查找法
//找到第一個key 與 最後一個key
//利用兩者下標的差+1 即求得key出現的次數
public:
int GetNumberOfK(vector<int> data ,int k) {
int len = data.size();
if(len < 1)
return 0;
int first = GetFirstOfK(data,k);
int last = GetLastOfK(data,k);
return last - first + 1;
}
int GetFirstOfK(vector<int> data ,int k){
int len = data.size();
int start = 0;
int end = len - 1;
int mid = (end + start)/2;
while(start <= end){
if(data[mid] < k){
start = mid + 1;
}
else
end = mid - 1;
mid = (end + start)/2;
}
return start;
}
int GetLastOfK(vector<int> data ,int k){
int len = data.size();
int start = 0;
int end = len - 1;
int mid = (end + start)/2;
while(start <= end){
if(data[mid] <= k){
start = mid + 1;
}
else
end = mid - 1;
mid = (end + start)/2;
}
return end;
}
};