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

二分查找算法:高效搜索的核心技巧

一、二分查找核心原理在有序数组中不断取中间值对比目标值每次舍弃一半区间快速缩小查找范围。适用前提数组单调递增 / 递减优势海量数据查找效率远高于遍历核心变量左边界 left、右边界 right、中间下标 mid二、基础二分模板查找单个目标值#include iostream #include vector using namespace std; // 查找目标值存在返回下标不存在返回-1 int binarySearch(vectorint nums, int target) { int left 0; int right nums.size() - 1; while(left right) { int mid left (right - left) / 2; // 防溢出写法 if(nums[mid] target) { return mid; } else if(nums[mid] target) { left mid 1; } else { right mid - 1; } } return -1; }三、两大边界模板高频考题模板 1查找左边界重复元素取最左侧位置int leftBound(vectorint nums, int target) { int left 0, right nums.size() - 1; while(left right) { int mid left (right - left) / 2; if(nums[mid] target) right mid - 1; else left mid 1; } // 校验下标合法性与数值匹配 if(left nums.size() || nums[left] ! target) return -1; return left; }模板 2查找右边界重复元素取最右侧位置int rightBound(vectorint nums, int target) { int left 0, right nums.size() - 1; while(left right) { int mid left (right - left) / 2; if(nums[mid] target) left mid 1; else right mid - 1; } if(right 0 || nums[right] ! target) return -1; return right; }四、mid 防溢出说明常规写法(leftright)/2数值过大易整型溢出最优写法left (right-left)/2运算安全等价五、经典实战例题例题 1搜索目标元素范围输入有序数组返回目标值起始、结束下标vectorint searchRange(vectorint nums, int target) { int l leftBound(nums, target); int r rightBound(nums, target); return {l, r}; }例题 2搜索插入位置有序数组找到目标插入下标保持数组有序int searchInsert(vectorint nums, int target) { int left 0, right nums.size() - 1; while(left right) { int mid left (right - left) / 2; if(nums[mid] target) return mid; else if(nums[mid] target) left mid 1; else right mid - 1; } return left; }六、二分查找适用场景有序数组元素查找、统计重复个数旋转有序数组搜索找极值、分割区间平方根计算、数值判定类题型大数据量查询优化七、核心边界易错点循环条件left right和left right混用区间截断错误左右边界更新mid±1漏写造成死循环重复元素场景误用基础模板无法取边界查找结束后未校验下标越界八、模板选用口诀唯一元素精准查找 → 基础模板重复元素找最先出现位置 → 左边界模板重复元素找最后出现位置 → 右边界模板无序数组严禁使用二分查找九、今日总结二分依赖有序性时间复杂度\(O(logn)\)熟记基础、左边界、右边界三套模板mid 采用安全写法规避数值溢出边界判断是刷题失分核心点区分不同场景套用模板
http://www.zskr.cn/news/1358693.html

相关文章:

  • JMeter 5.6.3本地环境配置全指南:Java版本、下载校验与跨平台启动
  • Unity权限问题根治指南:告别以管理员身份运行
  • 从getjiffies看Linux 0.11系统调用机制:一次穿越回1991年的内核探秘
  • Mythos动态能力编排:大模型推理流实时重定向技术解析
  • 如何用Campus-Imaotai实现i茅台自动预约?终极免费Java自动化工具完全指南
  • 从共源到共栅:一张图看懂CMOS单级放大器怎么选(含增益/阻抗/摆幅对比表)
  • MoE混合专家架构:揭秘大模型参数激活率与真实算力开销
  • 2026兰州黄金回收市场权威数据分析全网舆情研判上门实地背调315认证正规老店指南 - 鑫顺黄金回收
  • JMeter HTTP接口测试核心原理与工程实践指南
  • 验证码识别的工程实践:轻量CNN+CTC实现50ms级端到端识别
  • 从‘更相减损术’到欧几里得:图解最大公约数算法的千年演进与代码优化
  • 【AI测试智能体5】测试环境不隔离,你的 Agent 评测一文不值
  • 深度学习实验十大陷阱:从可复现性到训练-推理一致性
  • 将Taotoken配置为OpenClaw工具的后端提供方详细步骤
  • 2026年宜昌净水器推荐:靠谱品牌排名与选购指南 - 资讯纵览
  • 初创团队人力资源管理:避开这5大坑,轻松招人留人-佛山鼎策创局破局增长咨询
  • 手把手教你用STC15单片机驱动DS18B20:从数据手册到稳定测温(含OneWire时序详解)
  • 告别硬编码!用Verilog为FPGA驱动的WS2812B点阵设计一个图形动画引擎
  • UnityExplorer:Unity运行时内存分析与AssetBundle诊断工具
  • 通过审计日志功能回溯与分析团队成员的API调用情况
  • 2026产品经理提升职场沟通能力:数据分析的价值与路径
  • QMCDecode终极指南:3步解锁QQ音乐加密音频,让音乐真正属于你
  • 专用 ASIC 推理云平台:面向通用计算场景的 GPU 训练架构替代方案深度技术解析
  • 树莓派Linux命令行实战指南:从基础操作到系统运维
  • 别再只用鼠标了!eNSP这20个快捷键,让你模拟实验效率翻倍(附常用场景清单)
  • Taotoken Token Plan套餐如何帮助个人开发者优化实验成本
  • B站buvid3与_uuid设备标识生成原理及Python复现
  • 4大音乐平台统一解析:如何用music-api打破音乐服务壁垒
  • 如何彻底告别Cursor试用限制:5步实现AI编程助手永久免费使用指南
  • 基于RK3506J的工业核心板设计:从芯片选型到边缘计算应用实战