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

如何理解二分查找中不存在元素返回-1的断言逻辑?

为什么二分查找函数对不存在的元素返回-1?

你的二分查找函数中,当目标元素不在数组内时返回-1,是因为循环遍历完所有可能的搜索区间后仍未找到匹配项,就会执行最后的return -1。下面结合你举的两个例子拆解执行过程:

首先贴出你的实现代码:

def search(arr, target):
    left = 0
    right = len(arr) - 1
    while left <= right:
        mid = (left + right) // 2 # 向下取整
        if arr[mid] == target:
            return mid
        elif target < arr[mid]:
            right = mid - 1
        else:
            left = mid + 1
    return -1

示例数组:arr = [-2, 3, 4, 7, 8, 9, 11, 13]


情况1:目标元素比数组所有元素大(比如14)

一步步追踪循环执行:

  • 初始状态:left=0,right=7(数组长度为8,索引范围0-7)
  • 第一次循环:mid=(0+7)//2=3,arr[3]=7 < 14,所以调整左边界:left=3+1=4
  • 第二次循环:left=4 ≤ right=7,mid=(4+7)//2=5,arr[5]=9 <14,调整左边界:left=5+1=6
  • 第三次循环:left=6 ≤ right=7,mid=(6+7)//2=6,arr[6]=11 <14,调整左边界:left=6+1=7
  • 第四次循环:left=7 ≤ right=7,mid=(7+7)//2=7,arr[7]=13 <14,调整左边界:left=7+1=8
  • 此时left=8,right=7,left <= right的条件不成立,循环结束,执行return -1

情况2:目标元素比数组所有元素小(比如-4)

同样追踪循环:

  • 初始状态:left=0,right=7
  • 第一次循环:mid=3,arr[3]=7 > -4,调整右边界:right=3-1=2
  • 第二次循环:left=0 ≤ right=2,mid=(0+2)//2=1,arr[1]=3 > -4,调整右边界:right=1-1=0
  • 第三次循环:left=0 ≤ right=0,mid=0,arr[0]=-2 > -4,调整右边界:right=0-1=-1
  • 此时left=0,right=-1,left <= right的条件不成立,循环结束,执行return -1

核心逻辑总结

这个二分查找的循环条件left <= right意味着:只要当前搜索区间内还有元素,就继续检查。一旦循环退出,说明整个数组的所有元素都被排查过,但没有找到目标元素。返回-1是二分查找里的通用约定——用这个特殊值明确标记“未找到目标”,和“找到目标返回对应索引”的结果做区分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:01:05