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

二分查找法实例应用的细节分析

细节二:

搜索时选定新边界,新边界的值是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赋值。

http://www.jsqmd.com/news/896580/

相关文章:

  • 2026年4月国内优秀的工业冷却塔公司推荐,冷却塔/方形逆流冷却塔/冷却塔填料/圆形逆流冷却塔,工业冷却塔订制厂家推荐 - 品牌推荐师
  • 程序员如何在AI时代保持竞争力:2026年的生存指南
  • 锐捷交换机端口与IP双向定位实战:从MAC地址表到ARP表的追踪艺术
  • Token烧不起了?比肩Claude Opus 4.6免费模型来了,还将开源
  • 2026新疆高评分持证导游TOP8榜单全维度纯玩|全年零投诉权威汇总 - 必辉旅行
  • 手把手教你用BES Audio Developer工具在线调试通话降噪(以2MIC_NS7和RX_NS3为例)
  • 多模型聚合平台如何帮助团队清晰掌控API使用成本
  • 金华黄金回收六强实力解析:福昌夏领跑上门高价榜 - 黄金上门回收
  • 2026年东莞电动阀品牌推荐榜:电动二通阀/电动迷你球阀/断电复位,精准温控与稳定品质优选 - 企业推荐官【官方】
  • 5分钟解锁专业级法线贴图:零门槛在线工具完全指南
  • Mask2Former图像分割避坑指南:从ViT特征提取到Dice损失调参的全流程解析
  • 基于Postman的Redfish接口自动化测试实战
  • AltiumDesigner PCB案牍(2)——Gerber文件交付前的CAM350校验与常见陷阱规避
  • Virtual-ZPL-Printer:告别物理打印机,高效测试Zebra条码标签的智能解决方案
  • 2026南通市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 防水补漏3
  • 【力扣100题】53.最长回文子串
  • 基于4T2M TCAM的无损软PUF设计:硬件安全新范式
  • 安培环路定律|磁路计算核心公式 + 工程应用
  • 多人协作表格哪个好用?2026年最新工具答案来了
  • 2026年4月镀锌管采购攻略:精选厂家一览,20#无缝钢管/薄壁精密钢管/异型管/厚壁无缝钢管/方管,镀锌管公司推荐 - 品牌推荐师
  • 2026降AI率工具红黑榜:AI智能降重工具怎么选?清单来了 - 降AI小能手
  • 毕业答辩效率神器|告别熬夜改PPT,百考通AI一站式搞定答辩演示文稿
  • 魔兽世界API与宏命令工具:终极免费指南与实用技巧
  • 国际机票代理哪家强?实测3家龙头:第一名武汉圣擎,售后无人能及! - 土星买买买
  • 如何快速完成音频格式转换:免费工具FlicFlac的完整指南
  • 2026年反渗透水处理设备厂家怎么选?标杆企业全景洞察与应用深度解析 - 深度智识库
  • 告别笨重的串口助手:用SEGGER RTT Viewer实时抓取单片机日志的完整配置流程
  • 从‘unwrap’函数到三维点云:Matlab四步相移条纹三维重建全流程拆解
  • 保姆级教程:在Ubuntu 22.04上用SCons为CanMV K230大小核交叉编译CoreMark(附完整SConstruct文件)
  • 2026济宁市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 防水补漏3