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

查找数组旋转次数题中使用<代替<=为何会触发超时?

二分查找超时原因分析

核心死循环触发逻辑

你遇到的TLE本质是边界场景下循环无法收敛,具体触发逻辑如下:

  • 当start和end相邻时(即end = start + 1),mid = start + (end - start)/2的计算结果永远等于start
  • 此时如果arr[mid] == arr[start](要么mid就是start本身,要么数组有重复元素),原始判断arr[mid] < arr[start]不成立,会走else分支把start赋值为mid(和原来的start完全一致)
  • 下一轮循环的start和end还是原来的相邻状态,mid计算结果也不会变化,永远卡在这个状态无法退出循环,最终导致超时。

具体测试用例复现

举最简单的无旋转递增数组示例:arr = [1,2,3,4,5],预期返回值为0,原始代码运行流程:

  1. 初始状态:start=0, end=4,mid=2,arr[2] = 3 > arr[0] = 1,走else分支start = 2
  2. 第一轮迭代:start=2, end=4,mid=3,arr[3] =4 > arr[2] =3,走else分支start=3
  3. 第二轮迭代:start=3, end=4,mid=3,arr[3] =4等于arr[start] =4,原始条件arr[mid]<arr[start]不成立,走else分支start=3
  4. 后续迭代永远卡在start=3, end=4的状态,无法退出循环。

加等号后的逻辑修复

把判断条件改成arr[mid] <= arr[start]后,上述场景下arr[mid] == arr[start]会命中判断,执行end = mid -1 = 2,此时end < start,循环正常退出,返回0符合预期。
同时这个修改也覆盖了数组存在重复元素的场景,不会因为元素相等导致循环无法收敛。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:39:01