You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分搜索中为何给下界加1?能否替换lo=mid+1与hi=mid-1?

嘿,这个问题问得特别精准——二分搜索的边界调整绝对是新手最容易卡壳的点,我来给你讲明白其中的逻辑:

能不能直接替换成lo = mid和hi = mid?

绝对不能,直接替换会导致死循环。举个简单的例子:
假设数组A = [1,3],要搜索的target = 3。
按照修改后的代码执行:

  1. 初始lo=1,hi=2,mid = 1 + (2-1)/2 = 1
  2. 此时A[mid] = 1 < 3,所以lo = mid = 1
  3. 循环条件lo <= hi依然成立,接下来计算的mid还是1,重复步骤2,永远跳不出循环

这是因为当搜索范围缩小到只剩两个元素时,修改后的边界调整无法让搜索范围收敛到空,导致无限循环。

为什么要写lo = mid+1和hi = mid-1?

核心原因是:当A[mid] != target时,mid这个位置已经被彻底排除在可能的搜索范围之外了。

  • 当A[mid] < target:说明target一定在mid的右侧(因为数组是有序的),所以下一次搜索的左边界应该从mid+1开始——mid本身已经比目标小,不可能是要找的元素,没必要再留在搜索范围内。
  • 当A[mid] > target:同理,target一定在mid的左侧,所以下一次搜索的右边界要设为mid-1——mid本身比目标大,直接排除。

这种写法的本质是每次循环都严格缩小搜索范围,确保循环一定会终止(因为lo和hi的差值每次至少减少1)。

补充:另一种二分搜索写法

如果非要用lo = mid或者hi = mid,那得把循环条件改成lo < hi,这是另一种常见的二分搜索范式(比如用来找下界),但逻辑和你现在的代码完全不同,不能直接替换原代码的边界调整方式。


内容的提问来源于stack exchange,提问作者asndonsadoasndo231213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:07:49