34、数字在排序数组中出现的次数t

题目:

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

解法:

1、先求该数字出现的最左边位置。

2、再求该数字出现的最右边位置。

3、若该数字未出现,则会出现left在right右边。且相邻的情况。

最后结果仍然为right-left+1 =0

代码:

    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size()==0||data.empty() ) //边界异常判断
            return 0;
        int n = data.size();
        int left =0;
        int right = n-1;
        while(left<=right) //两个while只有一处不一样, 
        {  // 求left位置
            int mid = (right+left)>>1;
            if(data[mid]<k)
                left = mid+1;
            else if(data[mid]>k)
                right = mid-1;
            else if(data[mid]==k) 中间值等于目标值K,那么出现k值的最左边位置一定位于left,mid-1之间。
                right =mid-1;
        }
        int a= left;
        left =0;
        right = n-1;
        while(left<=right) //求right位置。
        {
            int mid = (right+left)>>1;
            if(data[mid]<k)
                left = mid+1;
            else if(data[mid]>k)
                right = mid-1;
            else if(data[mid]==k) //中间值等于目标k,那么出现K的最右位置一定在mid+1,right之间。
                left =mid+1;
        }
        return right-a+1;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值