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

为什么二分查找的中间轴点常写为left + (right - left) // 2?

二分查找轴点计算逻辑说明

首先附上对应的Python二分查找实现代码:

left, right = 0, len(nums) - 1

while left <= right:
    # // 2 -> 向下取整
    pivot = left + (right - left) // 2
    if nums[pivot] == target:
        return pivot
    if target < nums[pivot]:
        right = pivot - 1
    else:
        left = pivot + 1

采用left + (right - left) // 2而非len(nums) // 2的核心原因

  • 适配动态缩小的查找区间
    len(nums) // 2计算的是整个数组的固定中点,仅在第一次查找时有效。二分查找的核心逻辑是每次比对后都会缩小查找范围,左边界left和右边界right会随查找过程动态调整,后续的查找区间已经不是完整的原数组,用原数组长度计算的中点根本不在当前有效查找区间内,无法完成后续查找逻辑。
  • 避免整数溢出(跨语言通用兼容)
    这种写法是各类语言实现二分查找的通用规范:在C、C++、Java等存在固定长度整数类型的语言中,如果left和right的取值都接近整型最大值,直接计算left + right会发生整数溢出,得到负数结果,最终计算出的pivot完全错误。而left + (right - left) // 2的计算过程中,right - left始终是非负数,和left相加后的结果不会超过right的取值,从根源上避免了溢出问题。虽然Python的int支持任意精度不会触发溢出,但保留这种写法可以保证代码的跨语言可读性和逻辑通用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:36:06