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

为何二分搜索代码触发Time Limit Exceeded(TLE),线性搜索却正常?

二分搜索超时问题分析与修复

你的二分搜索代码存在几个关键错误,导致搜索范围无法正确缩小,最终陷入死循环触发TLE:

  • 边界更新逻辑完全搞反:
    当nums[m] < target时,目标应该在右半区间,正确操作是把左边界l设为m + 1,而不是修改右边界r;反之,当nums[m] >= target时,目标在左半区间,应该把右边界r设为m - 1,而不是修改左边界l。这是导致搜索范围越缩越乱、最终死循环的核心原因。

  • 循环条件错误:
    do-while循环先执行再判断条件,你的终止条件(l <= r) && (nums[m] != target)逻辑矛盾——找到target时会终止,但如果没找到,l最终会大于r,但错误的边界更新已经让程序陷入死循环,根本等不到这个判断生效。

  • 未处理未找到目标的情况:
    如果遍历完数组都没找到target,应该返回-1,而不是直接返回m,否则会返回一个错误的索引。

修复后的代码如下:

int search(int* nums, int numsSize, int target){
    int l = 0;
    int r = numsSize - 1;
    while (l <= r) {
        int m = l + (r - l) / 2; // 和你的m计算方式等价,写法更直观
        if (nums[m] == target) {
            return m;
        } else if (nums[m] < target) {
            l = m + 1;
        } else {
            r = m - 1;
        }
    }
    return -1; // 未找到目标返回-1
}

修复说明:

  1. 用while循环替代do-while,确保每次循环前先判断搜索范围是否有效
  2. 正确更新边界:小于target时左移左边界,大于时右移右边界
  3. 找到目标立即返回,循环结束后返回-1表示未找到

这样修改后,二分搜索就能正常工作,不会出现超时问题,效率也远高于线性搜索。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:10:27