AcWing 67. 数字在排序数组中出现的次数

题目描述

统计一个数字在排序数组中出现的次数。

例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。

样例

输入:[1, 2, 3, 3, 3, 3, 4, 5] ,  3

输出:4

问题分析 

用两次二分查找分别找到区间的左端点和右端点。返回区间的长度即可。

代码实现

class Solution {
public:
    int getNumberOfK(vector<int>& nums , int k) {
        if(nums.empty())
            return 0;
        int l = 0, r = nums.size() - 1;
        while(l < r){
            int mid = l + r >> 1;
            if(nums[mid] < k)
                l = mid + 1;
            else
                r = mid;
        }
        int left = l;
        l = 0, r = nums.size() - 1;
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(nums[mid] > k)
                r = mid - 1;
            else
                l = mid;
        }
        int right = l;
        return right - left + 1;
    }
};

猜你喜欢

转载自blog.csdn.net/mengyujia1234/article/details/89920242