代码随想录数组章节(1)二分查找
2026/7/19 3:30:53 网站建设 项目流程

二分查找算法核心思想

二分查找(Binary Search)是一种在有序数组中高效查找目标值的算法。其核心思想是:

  1. 利用数组有序的特性,每次循环查找中间位置的数值;
  2. 通过比较中间值与目标值的大小,判断目标值位于左侧区间还是右侧区间
  3. 不断缩小搜索范围,直到找到目标值或搜索区间为空。

基本要素

  • 数组nums(有序)
  • 数组大小n = nums.size()
  • 目标值target

区间表示法

二分查找有两种常见的区间表示方法:

  1. 左闭右闭[0, n-1](最后一位的实际索引为n-1
  2. 左闭右开[0, n)(右边界不包含)

左闭右闭写法

int left = 0; int right = n - 1; // 右边界包含 while (left <= right) { // 左闭右闭时,left == right 仍有意义 int mid = left + (right - left) / 2; // 防止溢出 if (target < nums[mid]) { // target 位于左侧区间 right = mid - 1; // 更新右边界,mid 已排除 } else if (target > nums[mid]) { // target 位于右侧区间 left = mid + 1; // 更新左边界,mid 已排除 } else { return mid; // 找到目标值 } } return -1; // 未找到

关键点

  • 循环条件:left <= right(左闭右闭区间有效)
  • 边界更新:right = mid - 1left = mid + 1(mid 已检查,需排除)
  • 防止溢出:使用left + (right - left) / 2计算 mid

左闭右开写法

int left = 0; int right = nums.size(); // 右边界不包含 while (left < right) { // 左闭右开时,left == right 无意义 int mid = left + (right - left) / 2; // 防止溢出 if (target < nums[mid]) { // target 位于左侧区间 [left, mid) right = mid; // 更新右边界,mid 不包含 } else if (target > nums[mid]) { // target 位于右侧区间 [mid+1, right) left = mid + 1; // 更新左边界,mid 已排除 } else { return mid; // 找到目标值 } } return -1; // 未找到

关键点

  • 循环条件:left < right(左闭右开区间有效)
  • 边界更新:right = midleft = mid + 1(mid 已检查,需排除)
  • 防止溢出:使用left + (right - left) / 2计算 mid
  • 区间含义:[left, right)表示包含 left,不包含 right

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询