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

问题背景

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

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

  • 0 ≤ j ≤ n u m s [ i ] 0 \le j \le nums[i] 0≤j≤nums[i]
  • i + j < n i + j \lt n i+j<n
    返回到达 n u m s [ n − 1 ] nums[n - 1] nums[n−1] 的最小跳跃次数。生成的测试用例可以到达 n u m s [ n − 1 ] nums[n - 1] nums[n−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 nums[i] \le 1000 0≤nums[i]≤1000
  • 题目保证可以到达 n u m s [ n − 1 ] nums[n-1] nums[n−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;
    }
}
相关推荐
无限进步_9 分钟前
【C语言】循环队列的两种实现:数组与链表的对比分析
c语言·开发语言·数据结构·c++·leetcode·链表·visual studio
wjykp14 分钟前
79~87逻辑回归f
算法·机器学习·逻辑回归
何包蛋H19 分钟前
数据结构深度解析:Java Map 家族完全指南
java·开发语言·数据结构
古译汉书26 分钟前
keil编译错误:Error: Flash Download failed
开发语言·数据结构·stm32·单片机·嵌入式硬件
聆风吟º28 分钟前
【顺序表习题|图解|双指针】合并两个有序数组 + 训练计划 I
c语言·数据结构·c++·经验分享·算法
wa的一声哭了31 分钟前
矩阵分析 方阵幂级数与方阵函数
人工智能·python·线性代数·算法·自然语言处理·矩阵·django
菩提祖师_33 分钟前
基于MATLAB的心电信号处理与心律异常检测算法设计
算法·matlab·信号处理
foundbug99938 分钟前
用ode45求解悬臂梁的动力学方程,得到其变形
算法
linsa_pursuer39 分钟前
最长连续序列
java·数据结构·算法·leetcode
wa的一声哭了40 分钟前
矩阵分析 单元函数矩阵微积分和多元向量值的导数
linux·c语言·c++·线性代数·算法·矩阵·云计算