题目描述
统计一个数字在排序数组中出现的次数。
总结:这个题目中给出“排序”的字眼,就可以使用二分法。用二分查找算法在排序数组中第一个重复数字和最后一个重复数字。从而求得数字在数组中出现的次数。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.empty() || k<data.front()||k > data.back())
return 0;
int index = binary_search(data ,k,0,data.size()-1);
if(index == -1) return 0;
int pre_index = index-1,next_index = index+1;
int cnt = 1;
while(pre_index >=0 && data[pre_index]==k){
cnt++;
pre_index--;
}
while(next_index < data.size() && data[next_index]==k){
cnt++;
next_index++;
}
return cnt;
}
int binary_search(vector<int>& data ,int k,int low ,int high){
while(low <= high){
int mid = low + (high - low) /2;
if(data[mid] == k) return mid;
else if(data[mid] > k) high = mid -1;
else low = mid+1;
}
return -1;
}
};