剑指offer-刷题笔记-简单题-JZ53 数字在升序数组中出现的次数

剑指offer-刷题笔记-简单题-JZ53 数字在升序数组中出现的次数

版本1-顺序查找

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size() == 0 || k > data[data.size()-1] || k < data[0])
        {
            return 0;
        }
        
//         int low,high,mid;
//         low = 0;
//         high = data.size()-1;
//         mid = (low + high)/2;
        int count = 0;
        
//         if(k > data[data.size()-1] || k < data[0])
//         {
//             return 0;
//         }
        
        for(int i = 0;i<data.size();i++)
        {
            if(data[i] == k)
            {
            	//顺序表,开始找到的是第一个,从这个位置开始直到重复值结束
                while(data[i+count] == k)
                {
                    count += 1;
                }
                break;
            }
//             else if(data[mid] < k)
//             {
//                 low = mid + 1;
//             }
//             else
//             {
//                 high = mid - 1;
//             }
        }
        return count;
    }
};

版本2-二分查找

注意

class Solution {
public:
    int GetNumberOfK(vector<int> nums ,int target) {
        int lbound = 0, rbound = 0;
        // 寻找上界
        int l = 0, r = nums.size();
        while (l < r) {
            int mid = l + (r - l) / 2;
            //上界刚好是大于target的第一个值
            if (nums[mid] < target) {
                l = mid + 1;
            }
            else {
                r = mid;
            }
        }
        lbound = l;
        // 寻找下界
        l = 0, r = nums.size();
        while (l < r) {
            int mid = l + (r - l) / 2;
            //下界刚好是等于target的第一个值
            if (nums[mid] <= target) {
                l = mid + 1;
            }
            else {
                r = mid;
            }
        }
        rbound = l;
        return rbound - lbound;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值