数字在排序数组中出现的次数★★★
题目描述
统计一个数字在排序数组中出现的次数。
解题思路:
思路一:
正常遍历数组,找到k第一个出现的位置,然后累加直到不是k。实现简单。
思路二:
有序数组,考虑使用二分查找,查找第一k的位置和最后一个k的位置,距离即为次数。
//思路一
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int vnum = 0;
int i=0;
for(; i < data.size(); i++){
if(data[i] == k){
break;
}
}
while(i < data.size()){
if(data[i] == k){
vnum++;
}else{
break;
}
i++;
}
return vnum;
}
};
//思路二
class Solution {
public:
int binSearh(vector<int> vct, double k){
//查找第一个大于k的值的位置
int st = 0;
int en = vct.size()-1;
while(st <= en){
int mid = (st+en)/2;
if(vct[mid] < k){
st = mid+1;
}else if(vct[mid] > k){
en = mid-1;
}
}
return st;
}
int GetNumberOfK(vector<int> data ,int k) {
return binSearh(data, k+0.5) - binSearh(data, k-0.5);
}
};
学学学 练练练 刷刷刷

浙公网安备 33010602011771号