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

LeetCode跳跃游戏II:while循环无法终止问题排查求助

跳跃游戏最少次数解法超时问题分析

问题描述

给定一个长度为n的0索引整数数组nums,初始位置为nums[0]。每个元素nums[i]表示从索引i出发的最大向前跳跃长度,即若位于nums[i],可跳至任意nums[i+j],其中0≤j≤nums[i]且i+j<n。要求返回到达nums[n-1]的最少跳跃次数,测试用例保证可到达终点。

示例1:输入nums = [2,3,1,1,4],输出:2
解释:到达最后索引的最少跳跃次数是2。从索引0跳1步到1,再跳3步到最后索引。

示例2:输入nums = [2,3,0,1,4],输出:2

我的解法

class Solution:
    def jump(self, nums: List[int]) -> int:
        
        j = len(nums)-1
        res = []
        while j >= 0:
            cursor = j

            valid_j = j # this variable will hold the best value of j to be set
            while cursor >= 0:
                if nums[cursor] + cursor >= j:
                    valid_j = cursor
                cursor-=1
            
            res.append(valid_j)
            
            j = valid_j

        return len(res)

这段代码存在某个while循环无法终止的问题,导致时间超限,我找不到错误原因,请求帮忙解释。


错误原因分析

你的代码逻辑是从终点倒推找能跳到当前位置的最左起点,再更新j为该起点,直到回到索引0。但核心问题出在外层循环的终止条件:

  • 当j被更新为0后,外层循环条件j >=0依然成立,会再次进入循环。此时内层循环遍历后,valid_j还是0,j被重新赋值为0,导致无限循环,最终触发时间超限。
  • 另外,即使解决死循环,你的算法时间复杂度是O(n²),面对大长度数组(比如10^4级别的测试用例)时,重复遍历的开销也会导致超时。

修复方案

1. 修复死循环的倒推版本

把外层循环条件改为j > 0,当j已经是起点0时直接终止循环:

class Solution:
    def jump(self, nums: List[int]) -> int:
        j = len(nums)-1
        res = 0
        while j > 0:
            valid_j = j
            cursor = j - 1
            while cursor >= 0:
                if nums[cursor] + cursor >= j:
                    valid_j = cursor
                cursor -= 1
            j = valid_j
            res += 1
        return res

2. 更高效的贪心版本(O(n)时间复杂度)

正向遍历数组,维护当前跳跃的边界和能到达的最远位置,每到达边界就增加跳跃次数,避免重复遍历:

class Solution:
    def jump(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return 0
        jumps = 0
        current_end = 0
        farthest = 0
        for i in range(len(nums)-1):
            farthest = max(farthest, i + nums[i])
            if i == current_end:
                jumps +=1
                current_end = farthest
                if current_end >= len(nums)-1:
                    break
        return jumps

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:30:54