剑指offer:数字在排序数组中出现的次数

题目描述

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

思路:

因为数组是排好序的,可以参考二分查找的思路,先用一次二分查找找到数组中第一个小于等于指定元素的下标l,再用一次二分查找找到数组中第一个大于指定元素的下标r,该数字出现的次数就是r-l

参考代码:

在线测试

https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&tqId=11190&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

AC代码

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

猜你喜欢

转载自blog.csdn.net/u012991043/article/details/81608065
今日推荐