题解 | #数字在升序数组中出现的次数#

数字在升序数组中出现的次数

https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2

class Solution {

public:

    int GetNumberOfK(vector<intdata ,int k) {

        // 找到第一次出现数字的位置

        if(!data.size())

            return 0;

        int first = Search(data ,k);

        int last = Search(data , k+1);

        if(data[first] != k || first == data.size())

            return 0;

        return last-first;

    }

    int Search(vector<intdata ,int k)

    {

        int n = data.size();

        // e.g:[2,2],2.在找k+1(3)这个数字的时候,希望返回数组最后一个位置再往后一个位置,这样相减才能覆盖对

        int l = 0, r = n;

        while(l < r)

        {

            int mid = (l+r)/2;

            if(data[mid]<k)

                l = mid+1;

                // 左区间应该包含 m 位置

            else

                r = mid;

        }

        return l;

    }

};

全部评论

相关推荐

11-11 14:21
西京学院 C++
Java抽象练习生:教育背景放最前面,不要耍小聪明
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务