LeetCode[中等] 45. 跳跃游戏 II

给定一个长度为 n0 索引 整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

思路 贪心算法

currMaxPos为当前跳跃次数可达最大距离,nextMaxPos为下一次跳跃可达最大距离。

如果 i>currMaxPosition,则下标 i 超出跳跃次数 currJumps 可以到达的最大下标,因此到达下标i的最小跳跃次数 + 1,currMaxPos 更新为 nextMaxPos

cs 复制代码
public class Solution {
    public int Jump(int[] nums) {
        int currMaxPos = 0, nextMaxPos = 0;
        int stepNums = 0;
        for(int i = 0; i < nums.Length; i++)
        {
            if(i > currMaxPos)
            {
                stepNums++;
                currMaxPos = nextMaxPos;
            }
                
            nextMaxPos = Math.Max(nextMaxPos, nums[i] + i);
        }
        return stepNums;
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。需要遍历数组一次,每个下标处的计算时间是 O(1)。

  • 空间复杂度:O(1)。

相关推荐
海石7 小时前
单调栈复健,顺便,牺牲一下吧,空间复杂度!一切献给AC
算法·leetcode
海石7 小时前
JS击败94%,Hard题想不到动态规划,那就用数组和栈试试
算法·leetcode
alphaTao9 小时前
LeetCode 每日一题 2026/7/6-2026/7/12
算法·leetcode
想吃火锅10059 小时前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
imuliuliang9 小时前
可合并堆在多任务调度中的优势与实现技巧7
算法
学究天人9 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
wabs66610 小时前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
用户3332397688410 小时前
我做了一个 RepoMind:让 AI 写架构前,先去看看真实开源项目
算法
chh56310 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
killerbasd10 小时前
总结 7。10
人工智能·算法·机器学习