数字在排序数组中出现的次数★★★
题目描述
统计一个数字在排序数组中出现的次数。
解题思路:
思路一:
正常遍历数组,找到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); } };
学学学 练练练 刷刷刷