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

题目描述

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

  

猜你喜欢

转载自www.cnblogs.com/chengsheng/p/10679982.html