【Leetcode 热题 100】45. 跳跃游戏 II

问题背景

给定一个长度为 n n n 的 0 0 0 索引 整数数组 n u m s nums nums。初始位置为 n u m s 0 nums0 nums0。

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

  • 0 ≤ j ≤ n u m s i 0 \le j \le numsi 0≤j≤numsi
  • i + j < n i + j \lt n i+j<n
    返回到达 n u m s n − 1 numsn - 1 numsn−1 的最小跳跃次数。生成的测试用例可以到达 n u m s n − 1 numsn - 1 numsn−1。

数据约束

  • 1 ≤ n u m s . l e n g t h ≤ 1 0 4 1 \le nums.length \le 10 ^ 4 1≤nums.length≤104
  • 0 ≤ n u m s i ≤ 1000 0 \le numsi \le 1000 0≤numsi≤1000
  • 题目保证可以到达 n u m s n − 1 numsn-1 numsn−1

解题过程

之前每日一题已经做过了,具体可以参考 每日一题的题解,再写一遍加强记忆。

具体实现

java 复制代码
class Solution {
    public int jump(int[] nums) {
        int res = 0;
        int curEnd = 0;
        int nextEnd = 0;
        // 由于到达的位置是 n - 1,那么在 n - 2 的位置上有可能进行最后一次操作
        for(int i = 0; i < nums.length - 1; i++) {
            // 在每个位置上更新能够到达的最远边界
            nextEnd = Math.max(nextEnd, i + nums[i]);
            // 如果当前已经不能继续往前走,那么在这个位置上造桥
            if(i == curEnd) {
                curEnd = nextEnd;
                res++;
            }
        }
        return res;
    }
}
相关推荐
木井巳1 小时前
【动态规划: 线性dp】解码方法
java·算法·leetcode·动态规划·推荐算法
春弦_9 小时前
自用算法整理二
数据结构·算法·图论
hetao173383710 小时前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
java_nnnn10 小时前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展
Navigator_Z11 小时前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
卡卡~~12 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
企业数字化笔记12 小时前
AI视频增强后画质怎么验收?插值基线、伪细节与帧间闪烁的检查方法
人工智能·算法·音视频
学逆向的13 小时前
C 内存属性
c语言·开发语言·算法·网络安全
lengxuenong13 小时前
树状数组 · 信息学学习手册1-求和3个模板
c++·学习·算法·青少年编程