题目描述
统计一个数字在排序数组中出现的次数。
有下面两种思路:
1. 顺序查找 统计次数
2. 因为已排序 则可以使用二分查找法 找到一个之后,在分别向前后依次查找
代码如下;
class Solution {
public:
//方法一:顺序查找 统计次数
int get_numberk(vector<int>& data, int k){
int count = 0;
for(int i = 0; i < data.size(); i++){
if(data[i] == k){
count++;
}
else{
if(0 != count){ //遇到第一个不是K的返回
break;
}
}
}
return count;
}
//方法二:因为已经排序 则可用二分查找 找到后在分别向前后找到所有的
int get_numberk_binary(vector<int>& data, int k){
if(0 == data.size()){
return 0;
}
int l = 0;
int r = data.size() - 1;
while(l <= r){ //二分查找法
int mid = (r + l) / 2;
if(data[mid] < k){
l = mid + 1;
}
else if(data[mid] > k){
r = mid - 1;
}
else{ //找到一个k
int start = mid;
int end = mid;
while(start != 0 && data[start-1] == k){ //向前找
start--;
}
while(end != data.size()-1 && data[end+1] == k){ //向后找
end++;
}
return end - start + 1;
}
}
return 0;
}
int GetNumberOfK(vector<int> data ,int k) {
//return get_numberk(data, k);
return get_numberk_binary(data, k);
}
};