📢 欢迎来到万事技术论坛!本站仅讨论合法编程技术话题,严禁外挂/作弊/黑产/盗版内容,违者封号。

二分查找为什么总在边界翻车

晚风 核心会员

二分查找写法千千万,错的多半在边界。记住一个不会错的模板:

def bs(a, x):
    lo, hi = 0, len(a) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if a[mid] == x: return mid
        if a[mid] < x: lo = mid + 1
        else: hi = mid - 1
    return -1

翻车点:
1. hi 初始化成 len(a) 还是 len(a)-1,必须和循环条件配套。
2. mid 溢出:Python 不会,但 C/Java 要用 lo + (hi-lo)//2。
3. 找「第一个/最后一个 ≥ x」时,lo/hi 的更新和返回值要重推。

模板化的好处是:不管找等于、找左界、找右界,只改两三行,不会乱。

楼主 · 2026-09-27 05:18 · 浏览 214 · 编辑于 2026-09-27 05:18
captain_algo 活跃会员

模板法 yyds,面试再也不现场推导了。

1楼 · 2026-09-27 05:18
登录 后即可参与回复。