当前位置: 首页 > article >正文

力扣hot100:34. 在排序数组中查找元素的第一个和最后一个位置(二分查找的理解)

478bb6441e444b51bac604fcc3e9bc89.png

        我们知道使用二分查找能找到值所在的位置。假如我们在找到值后仍然不断的更新指针会发生什么?我们可以利用这一点来找到最左边的以及最右边的值。

如果当nums[mid]==target时,使得 right=mid-1,那么最终会使得target在right的右边。

如果当nums[mid]==target时,使得 left=mid+1,那么最终会使得target在left的左边。

        原因是因为我们会不断更新left和right,即使是找到了值仍然更新。当我们找到一个目标值使得 right=mid-1,实际上我们是将target值认为比target值大的,然后又要寻找target值。最后left不断逼近target,right不断往左去掉target。

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if(nums.empty()) return {-1,-1};//除了forward_list外,所有容器都有的三个大小操作:size(),empty(),max_size()。返回值 是 列表初始化的
        int left=0,right=nums.size()-1;
        while(left<=right){//寻找最左边的元素
            int mid=(left+right)>>1;
            if(nums[mid]>=target) right=mid-1;
            else left=mid+1;
        }
        if(left==nums.size()||nums[left]!=target) return vector<int>{-1,-1};//列表初始化的匿名对象
        int ans=left;
        left=0,right=nums.size()-1;
        while(left<=right){//寻找最右边的元素
            int mid=(left+right)>>1;
            if(nums[mid]>target) right=mid-1;
            else left=mid+1;
        }
        return {ans,left-1};//列表初始化的匿名对象,涉及到一个类类型的 隐式类型转换
    }
};

 涉及到的STL问题已经标注。

 


http://www.kler.cn/a/272607.html

相关文章:

  • OpenVela——专为AIoT领域打造的开源操作系统
  • 【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)
  • Python操作Excel——openpyxl使用笔记(2)
  • Mybatis面试题
  • NLP自然语言处理分词模块HanLP
  • pytest-instafail:让测试失败信息即时反馈
  • 心灵治愈交流平台|基于springboot框架+ Mysql+Java+B/S结构的心灵治愈交流平台设计与实现(可运行源码+数据库+设计文档)
  • 【playbook】
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:EffectComponent)
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇
  • 算法刷题day32
  • mysql 索引(为什么选择B+ Tree?)
  • RocketMQ - 发送消息时Producer是如何选择MessageQueue去发送的?
  • 画图实战-Python实现某产品全年销量数据多种样式可视化
  • mac下Appuim环境安装
  • 【设计模式】Java 设计模式之工厂模式(Factory Pattern)
  • 就业班 2401--3.13 走进网络
  • Trustzone和Tee的基本概念区分
  • C语言文件操作 w模式
  • 【计算机网络篇】物理层(2)传输方式
  • 贪心算法(算法竞赛、蓝桥杯)--线段覆盖
  • #LLM入门|Prompt#3.3_存储_Memory
  • 生成器建造者模式(Builder)——创建型模式
  • QT 如何防止 QTextEdit 自动滚动到最下方
  • modbus客户端
  • Tensorflow笔记(二):激活函数、优化器等、神经网络模型实现(商品销量预测)