news 2026/5/27 18:14:31

二分查找法细节分析及案例操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分查找法细节分析及案例操作

细节二:

搜索时选定新边界,新边界的值是mid ± 1还是mid

在进行一次搜索判断之后,查找新边界时,新边界一般有两种选择(以right为例)

  • right = mid - 1
  • right = mid

按照标准的二分查找框架,这两种赋值方式的区别是新区间是否还要包括mid这个点。

一般来说选择新边界时,其实已经对mid这个值已经判断过了,秉持着最大程度地缩小搜索区间的理念,按理说应该要将mid这个点在新区间排除掉的;

但联系上一个问题,如果判断条件是left < right,那么搜索区间是左闭右开区间,即使right = mid,也不会判断mid;但是如果right = mid - 1,那么就会少判断right = mid - 1这个点,所以这里新区间的边界为right = mid

所以这里的缩小区间表示式是和判断条件联系在一起的,需要考虑实际情况,然后再进行判断

尽管二分查找有统一的框架模板,操作步骤;但二分查找不是一种框架模板,而是一种思想

案例

  1. 当数组中含有多个目标数字
  • 查找最左边目标数字的索引
  • 查找最右边目标数字的索引

2. 当数组中不含有目标数字

    • 查找目标数字的插入位置

搜索边界

集合中含有多个符合要求的解,查找左边界或者右边界

e.g.

  • 按照全闭区间查找查找左右边界的关键是nums[mid] == target时,如何划定新区间。

如果查找左边界:

int binarySearch(vector<int>& nums,int target) { int n = nums.size(); int left = 0,right = n - 1; int ans = -1; while(left <= right){ int mid = left + (right - left) / 2; if (nums[mid] == target){ // 这里能判断出 mid 可能是左边界,但是对于 mid - 1 我们是无法判断的,所以 ans = mid; right = mid - 1; }else if (nums[mid] > target) { right = mid - 1; }else { left = mid + 1; } } return ans; }

最终结果都是ans。在每一次判断(nums[mid] == target)中,我们只能判断出mid是符合要求的,而无法判断出mid - 1或者mid + 1是否符合要求,所以ans = mid

按照这个思路中,其实也可以不采用 ans 这个变量,而采用right + 1或者left - 1的形式,因为right + 1或者left - 1等于mid,不过这需要进一步判断right + 1或者left - 1是否在数组范围内

如果你将nums[mid] == targetnums[mid] > target或者nums[mid] < target合并起来,你还需要判断nums[left - 1]或者nums[right + 1]是否等于target,因为当nums[mid] > target或者nums[mid] < target时,也会给ans赋值。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 18:14:23

大模型落地必看:RAG、微调、长上下文不是“单选题”,企业如何精准选型分清“主次”?

企业大模型落地常陷入RAG、微调、长上下文的选择困境。本文明确三者核心功能&#xff1a;RAG解决知识接入&#xff0c;微调塑造行为风格&#xff0c;长上下文扩展内容处理能力。企业知识更新快、量大、带权限等特点使其更适合RAG。三者并非替代关系&#xff0c;而是应分工协作&…

作者头像 李华
网站建设 2026/5/27 18:13:00

SLANeXt_wired vs 其他表格识别模型:性能对比与选择指南

SLANeXt_wired vs 其他表格识别模型&#xff1a;性能对比与选择指南 【免费下载链接】SLANeXt_wired_safetensors 项目地址: https://ai.gitcode.com/paddlepaddle/SLANeXt_wired_safetensors SLANeXt_wired 是飞桨PaddlePaddle生态下的表格识别模型&#xff0c;专注于…

作者头像 李华
网站建设 2026/5/27 18:08:08

QMCDecode终极指南:三步解锁QQ音乐加密音频格式转换自由

QMCDecode终极指南&#xff1a;三步解锁QQ音乐加密音频格式转换自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认…

作者头像 李华
网站建设 2026/5/27 18:08:05

PHP文件系统与流处理

引言PHP的流抽象层&#xff08;Stream Abstraction Layer&#xff09;是文件系统操作的核心&#xff0c;它统一了文件、网络、压缩等多种数据源的读写方式。本文将深入探讨PHP文件系统和流处理的高级技术。Stream WrappersPHP内置了多种流封装器&#xff0c;可以通过统一的接口…

作者头像 李华
网站建设 2026/5/27 18:05:14

涵道共轴双旋翼无人机飞控算法关键技术【附代码】

✨ 长期致力于涵道共轴双旋翼无人机、鲁棒控制、线性矩阵不等式、容错控制、动态观测研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;涵道共轴双旋翼无…

作者头像 李华