题目描述
统计一个数字在排序数组中出现的次数。
解题思路
- 暴力求解,没用到排序的已知条件。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()==0) return 0;
map<int, int> res;
for(int i=0; i<data.size(); i++){
res[data[i]]++;
}
return res[k];
}
};
- 二分法寻找第一个k的位置
class Solution {
public:
int FindFirstK(vector<int> data, int k, int start, int end){
if(start>end) return -1;
int mind = (start+end)/2;
int mval = data[mind];
if(mval==k){
if((mind>0 && data[mind-1]!=k) || mind==0){
return mind;
}
else end=mind-1;
}
else if(mval>k){
end=mind-1;
}
else{
start=mind+1;
}
return FindFirstK(data, k, start,end);
}
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()==0) return 0;
int cnt=0;
int firstK = FindFirstK(data, k, 0, data.size());
while(firstK<data.size()){
if(data[firstK]==k) cnt++;
else break;
firstK++;
}
return cnt;
}
};