数字在排序数组中出现的次数★★★

题目描述

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

  

posted @ 2019-04-09 21:39  tcgoshawk  阅读(154)  评论(0编辑  收藏  举报