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

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

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;
    }
};
全部评论

相关推荐

07-08 13:48
门头沟学院 C++
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
06-12 16:00
天津大学 Java
牛客30236098...:腾讯坏事做尽,终面挂是最破防的 上次被挂了后我连简历都不刷了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务