NO-37、 统计一个数字在排序数组中出现的次数

题目描述:
统计一个数字在升序数组中出现的次数。
输入:
[1,2,3,3,3,3,4,5],3
输出:
4
解法1:暴力法

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        auto pos=equal_range(data.begin(), data.end(),k);
        return pos.second-pos.first;
    }
};

解法2:二分法

class Solution {
public:
    //二分法
    int GetNumberOfK(vector<int> data ,int k) {
        int low=0,high=data.size()-1;
        if(high==-1)return 0;//data为空
        
        while(low<=high){
            int mid=low+(high-low)/2;
            if(data[mid]>k)high=mid-1;// 中间的数字大于k 则右边左移
            else if(data[mid]<k) low=mid+1;
            else{
                //已经找到
                int count=0;
                count++;
                int index=mid-1;
                while(index>=0&&data[index]==k){
                    count++;
                    index--;
                }
                index=mid+1;
                while(index<=data.size()-1&&data[index]==k){
                    count++;
                    index++;
                }
                return count;
            }
        }
        return 0;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值