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

【数据结构算法】二分查找

以前学过二分查找,但是一直忘记,过一段时间就忘记了,但是就是记着简单,但是还是忘记了,所以这次专门开篇文章记录,经典的二分查找 忘记了就过来大致瞟一眼。


一、最经典的二分查找模板(强烈建议记忆)

int binarySearch(int arr[], int n, int target) { int left = 0; int right = n - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == target) return mid; else if (arr[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }

二、记忆口诀

记住五步口诀

1 定左右 2 求中间 3 看中间 4 改区间 5 找不到返回 -1

展开就是:

left = 0 right = n - 1 while(left <= right) { mid if(相等) return 小了 → 左边移动 大了 → 右边移动 }

三、用一句话理解二分查找

二分查找的核心就是:

每次把搜索范围砍一半

举例具体的实现:

例如数组

1 3 5 7 9 11 13

9

第一次

mid = 7

因为

9 > 7

所以:

left = mid + 1

范围变成

9 11 13

继续找。


四、最容易写错的两个地方

1 mid 计算

推荐写:

int mid = left + (right - left) / 2;

防止整数溢出。

但普通写:

(left + right) / 2

也行。


2 while 条件

必须是:

left <= right

很多人写成:

left < right

会错。


五、脑子里的二分查找图

left right ↓ ↓ [1 3 5 7 9 11 13] ↑ mid

比较:

给定的target 值 和 arr[mid]

然后缩小范围。


六、一个10秒写出来的模板

主要记住这一行:

while(l <= r)

然后写:

arr[mid] 和 target 相等 return 小了 l = mid + 1 大了 r = mid - 1

就完事。


http://www.cnnetsun.cn/news/1290455.html

相关文章:

  • pikachu靶场——SQL-Inject—2(Kali系统)占位符
  • 深入了解JVM
  • 通过git上传代码到gitlab(包含第一次上传)小结
  • java毕业设计——基于JSP+sqlserver的人事管理系统设计与实现(毕业论文+程序源码)——人事管理系统
  • 【云计算】AWS核心服务解析:Dynamo到RDS全览
  • Visual Studio 2013 - 调试模式下根据内存地址查看内存
  • wow-byte字节操作说明
  • DevSecOps依赖安全:10个必备工具保护你的软件供应链
  • wow-hfile文件操作说明
  • mmdetection目标检测API封装:Python SDK开发全攻略
  • 如何快速上手LedisDB:高性能NoSQL数据库的完整指南
  • Leetcode_226. 翻转二叉树
  • 如何快速掌握Python 3:面向初学者的完整学习指南
  • Python笔记 - 利用装饰器设计注解体系
  • weixin225基于微信小程序的汽车销售系统的设计与实现springboot(文档+源码)_kaic
  • PyCaret批量预测:处理大规模推理任务的终极指南
  • Xcode 16及升级 Xcode 26 编译弹窗问题、编译通过无法,编译通过打包等问题汇总
  • 【JEECG 组件扩展】JUpload上传组件扩展拖拽区域上传
  • 看懂 SAP Memory Management:从用户会话、工作进程到系统调优的完整脉络
  • 智慧校园可视化大屏实战:从教室使用率到安全预警的8个真实案例
  • 快速获取天地图Key的完整指南(onmap)
  • Redis可视化利器——RedisDesktopManager的安装与实战指南
  • F2FS源码探秘-1.5 [NAT结构解析] Node Address Table的内存管理与优化策略
  • 手把手教你用AT32F415搭建低成本CAN记录仪(含FATFS文件系统移植)
  • 深入剖析STM32启动流程:从Flash到SRAM的代码执行之旅
  • Resolving NotImplementedError in YOLO: How to Handle Unsupported ‘_new‘ Mode for Undefined Tasks
  • 基于高德地图JSAPI的驾车路线规划实战:从基础集成到策略优化
  • 从B站到抖音:不同平台视频GOP设置的秘密(附ffprobe分析技巧)
  • Google Nano-Banana图像编辑实战:如何用蒙版和多图参考生成专业级作品?
  • 从零构建CPU:基于Verilog与FPGA的简易计算机系统设计实践