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

力扣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.lryc.cn/news/320203.html

相关文章:

  • 几何相互作用GNN预测3D-PLA
  • 2024最新版使用PyCharm搭建Anaconda
  • 前台于后台项目
  • Magical Combat VFX
  • hadoop伪分布式环境搭建详解
  • day12-SpringBootWeb 登录认证
  • 内外网数据单向导入导出 如何提升效率确保安全性?
  • Spring核心方法:Refresh全解(WebMVC如何装配、关联)
  • TCP:三次握手四次挥手及相关问题:
  • 链式二叉树--前序中序后序遍历,高度,节点个数问题
  • HCIA——TCP协议详解
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
  • 纯 CSS 实现文字换行环绕效果
  • 【爬虫逆向】Python逆向采集猫眼电影票房数据
  • 解析服务器下载速度:上行、下行与带宽之谜
  • 计算机网络的概念
  • MATLAB中的脚本和函数有什么区别?
  • 从电影《沙丘》说起——对人工智能的思考
  • 使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】
  • 学习笔记--在线强化学习与离线强化学习的异同(3)
  • 使用Thymeleaf导出PDF,页眉插入图片与内容重叠?
  • python网络编程:通过socket实现TCP客户端和服务端
  • 论文阅读——RSGPT
  • 长连接技术
  • 供电系统分类详解
  • 基于centos7的k8s最新版v1.29.2安装教程
  • 【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通
  • 如何在并行超算云上玩转PWmat③:使用Q-Flow提交计算的案例演示
  • html5cssjs代码 017样式示例
  • Vue.js动画