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

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

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param k int整型 
     * @return int整型
     */
    int GetNumberOfK(vector<int>& nums, int k) {
        int left = 0;
        int right = nums.size()-1;
        int Index = 0;
        bool flag = false;
        while(left <= right){
            int mid = left + (right - left) / 2;
            if(nums[mid] > k){
                right = mid -1;
            }
            else if(nums[mid] < k){
                left = mid + 1;
            }
            else{
                Index = mid;
                flag = true;
                break;
            }
        }
        if(!flag) return 0;
        int res = 0;
        for( int i = Index; i >= 0; i --){
            if(nums[i] == k) res ++;
            else break;
        }
        for( int i = Index; i < nums.size(); i ++){
            if( nums[i] == k) res ++;
            else break;
        }
        return res - 1;
    }
};

全部评论
不太满足要求的做法,先找到一个再两边扩 正常的做法 两次二分, 第一次二分查找左边界,不同的是相等时判断左边一位是否为k,是的话说明已经是左端点,否则,右边减一再查 第二次同理,不同的是判断右边一位是否为k,否则左边为加1再查
点赞 回复 分享
发布于 04-11 12:02 上海

相关推荐

不愿透露姓名的神秘牛友
07-07 13:15
点赞 评论 收藏
分享
07-07 17:06
已编辑
深圳技术大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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