二分查找边界问题——排序数组找元素第一次出现和最后一次出现

在这里插入图片描述

二分查找的边界逼近问题:
下面的代码,第一个函数会向左边界逼近,第二个函数会像右边界逼近!
考虑left=5,right=6这种情况,如果5,6的值都是满足的条件的怎么办?
如果mid=(left+right+1)/2,那么最后的mid就是6,
如果mid=(left+right)/2,那么最后的mid就是5,
由于哪怕已经找到了对应的值一样,但是我们要的是边界值,所以nums[mid]=target的时候不能退出循环,依旧要继续下去。同时如果mid值和要找的值相等,不能+1或-1,比如left=mid+1这种,因为如果是边界这个值就丢了。
继续考虑上面5,6的情况,如果mid = (left+right)/2,left=mid就会导致一直都是left=5 right=6死循环了,
所以我们要保证:当left=mid时候,mid要在大的那个数取,right=mid的时候值要在小的那个数字取,防止死循环。

class Solution {public int quickFindMin(int[] nums, int target,int left,int right){while(left<right){int mid = (left+right)/2;if(target<=nums[mid])right=mid;else left=mid+1;}return nums[left]==target?left:-1;}public int quickFindMax(int[] nums, int target,int left,int right){while(left<right){int mid = (left+right+1)/2;if(target>=nums[mid])left=mid;else right=mid-1;}return nums[left]==target?left:-1;}public int[] searchRange(int[] nums, int target) {//两次二分查找int n = nums.length;if(n==0)return new int[]{-1,-1};int left = quickFindMin(nums,target,0,n-1);int right = quickFindMax(nums,target,0,n-1);return new int[]{left,right};}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过满意度调查提升客户体验

在当今竞争激烈的市场环境中&#xff0c;客户体验已经成为了企业能否保持竞争力的关键因素之一。满意度调查的核心是关注客户需求&#xff0c;倾听客户声音&#xff0c;通过科学的方法和工具来评估客户对产品或服务的满意度&#xff0c;并为企业提供改进建议。满意度调查不仅可…

赤峰学院师资培养管理系统的设计与实现

摘 要 随着我国国民经济建设的蓬勃发展和信息技术的越发成熟&#xff0c;各个行业都在积极使用现代化的管理工具&#xff0c;不断改善企业的服务质量&#xff0c;提高工作效率。对师资培养进行现代化的管理&#xff0c;提高工作效率是师资培养管理系统的一大优点。本文是一篇关…

opencv学习二:加载显示图片

文章目录 加载显示图片&#xff08;一&#xff09;函数1.imread()读取图片&#xff08;1&#xff09;matplotlib和opencv中imread函数的区别 加载显示图片 &#xff08;一&#xff09;函数 1.imread()读取图片 Mat imread(const string& filename, int flags1 );第一个参…

Linux系统的常见命令十二,用户管理、、权限设置和组管理

目录 用户管理权限设置组管理 本文主要介绍Linux系统的用户管理、权限设置和组管理。 用户管理 在Linux系统中&#xff0c;用户管理是一个非常重要的部分&#xff0c;它涉及到用户账号的创建、权限的管理、密码的设置等。下面是一些用户管理的基本操作&#xff1a; 添加用户&…

自己开发组件更新到npm网站上 通过npm install 安装 保姆级别教程

文章目的 在项目开发中&#xff0c;经常通过npm install安装使用各种各样的npn包。本文记录如何自己实现的一个npm包 1. 环境准备 开发环境安装好,没有准备好环境 需要先安装哦 2. 创建Vue项目 初始化Vue项目&#xff1a;vue create xwdm-test 选择手动选择功能 Manually selec…

IP地理定位技术的服务内容详解

IP地理定位技术是一种通过IP地址确定设备或用户地理位置的技术&#xff0c;广泛应用于广告定向、网络安全、位置服务等领域。本文将深入探讨IP地理定位技术的服务内容&#xff0c;解析其在不同场景中提供的多种服务。 1. 准确的地理位置信息提供&#xff1a; IP地理定位技术的…

前端工作总结03

1、includes()与indexOf()的结合使用解决删除否的情况。 因为我们的列表中有些会有签发signMark的值&#xff0c;有些没有&#xff0c; 我用map方法返回相应数组某些值&#xff0c;返回一些新数组&#xff0c;如果没有返回的是[undefined],此时我们的length为1&#xff0c;所以…

在Windows中如何知道当前cmd的python解释器来自哪个位置

在Windows操作系统中&#xff0c;你可以通过命令提示符来确定当前使用的Python解释器来自哪个位置。为此&#xff0c;请按照以下步骤操作&#xff1a; 打开命令提示符&#xff08;可以通过在搜索栏中输入“cmd”或“Command Prompt”并打开它&#xff09;。 在命令提示符中输入…

CGAL的单调与排序矩阵搜索

monotone_matrix_search() 和 sorted_matrix_search() 是一种处理在具有某些结构特性的矩阵中高效查找最大条目的技术。许多具体问题都可以建模为矩阵搜索问题&#xff0c;对于其中一些问题&#xff0c;我们提供了显式解决方案&#xff0c;使您可以在不了解矩阵搜索技术的情况下…

【面试题】JavaScript高级循环方法

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 除了for循环♻️&#xff0c;for-of,for-each循环♻️也是一个不错的选择 先说for-of循环♻️ 认识for-of循环♻️…

如何在手机上打开电脑端本地的网页

目录 一.手机端预览VSCode生成的网页站点二.手机端预览VS2022生成的 WebApi网页站点三.手机端预览VS2022生成的 vueapp前端四.总结 今天遇到了2个小问题&#xff1a;1.想在手机上运行VSCode上写好的网页代码。2.同样在手机上运行VS2022 WebApi生成的网页。查找了一晚上资料&…

哪些AI软件有消除笔?这四款AI软件轻松消除水印

日常生活或工作中&#xff0c;离不开对图片的处理&#xff0c;AI已经对图片视频下手了&#xff0c;处理软件我们不必在用传统的PS来一点点扣了&#xff0c;AI能瞬间消除图片中多余的杂物&#xff0c;大大提高了打工人的工作效率&#xff0c;那么哪些AI软件有消除笔的功能呢&…

VIT总结

关于transformer、VIT和Swin T的总结 1.transformer 1.1.注意力机制 An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a wei…

【redis缓存高可用集群】

文章目录 Redis集群方案比较Redis高可用集群搭建Redis集群原理分析Redis集群节点间的通信机制哨兵leader选举流程 Redis集群方案比较 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异 常&#xff0c;则会做主从…

YOLOv8优化策略:SENetV2,squeeze和excitation全面升级,效果优于SENet | 2023年11月最新成果

🚀🚀🚀本文改进: SENetV2,squeeze和excitation全面升级,作为注意力机制引入到YOLOv8,放入不同网络位置实现涨点 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.SENetV2 论文:https://arxiv.org/…

C#中GDI+图形图像绘制(直线、矩形、圆、椭圆、圆弧、扇形、多边形)

目录 一、直线 二、矩形 三、椭圆 四、圆 五、圆弧 六、扇形 七、多边形 八、示例源码 一、直线 调用Graphics类中的DrawLine()方法&#xff0c;结合Pen对象可以绘制直线。DrawLine()方法有以下两种构造函数。 第一种用于绘制一条连接两个Point结构的线。当参数pt1的值…

状态类算法复杂排序输出

对于目标检测任务中对某一类的检测结果进行输出的时候&#xff0c;一般都是无序的&#xff0c;很明显这样子很难满足的我们的需求&#xff0c;我们更喜欢他是这样子输出的&#xff1a; &#x1f447; 我们可以看到——”按顺序输出结果“中的字段是完美的和上面图片中的识别结…

golang ssh demo

密码登入: package mainimport ("fmt""golang.org/x/crypto/ssh" )func main() {// 目标服务器地址targetAddr := "ip:22"// 创建 SSH 客户端连接sshConfig := &ssh.ClientConfig{User: "root",Auth: []ssh.AuthMethod{ssh.Pass…

大三上oracle数据库期末复习

1、创建表空间 2、创建用户 3、用户授权 oracle数据库逻辑存储结构&#xff1a; 1、表空间&#xff08;最大的逻辑存储单元&#xff09; 创建表空间 2、段 3、盘区&#xff08;最小的磁盘空间分配单元&#xff09; 4、数据块&#xff08;最小的数据读写单元&#xff09; 用…

WordPress(11)给文章添加预计阅读时长

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文件配置二、代码块1.引入库2.配置 single.php三、效果图前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…