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

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

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

本题要求空间O(1),时间复杂度O(logn),很容易想到要使用二分查找来做,先找出比k大的下标r,再找出比k小的下标l,最后k有r-l-1个。

public:
    int GetNumberOfK(vector<int> data ,int k) {
        int n = data.size();
        //求比k大的下标
        //注意循坏退出条件,当l==r时,若data[mid]<=k,则mid+1为所求,否则为mid(好好理解此时l的取值)
        int l=0,r=n-1;
        while(l<=r)
        {
            int mid = (l+r)/2;
            if(data[mid] <= k) l=mid+1;
            else r=mid-1;
        }
        int ans = l;
        
        
        l = 0;r = n-1;
        while(l<=r)
        {
            int mid = (l+r)/2;
            if(data[mid] >= k) r=mid-1;
            else l=mid+1;
        }
        ans=ans-r-1;
        return ans;
    }
};
全部评论

相关推荐

一天代码十万三:实习东西太少了,而且体现不出你业务,3个月不可能就这点产出吧,建议实习多写点,玩具项目面试官都不感兴趣的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务