【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;
    }
}
相关推荐
LuminousCPP1 分钟前
数据结构 - 排序(二):快速排序从错误初版到优化版|双指针划分 + 三数取中 + 小区间插入优化
c语言·数据结构·笔记·算法·排序算法
hansang_IR11 分钟前
【题解】P9753 [CSP-S 2023] 消消乐
数据结构·c++·算法
shehuiyuelaiyuehao25 分钟前
算法40,模拟运算,替换所有的问号
数据结构·算法·leetcode
用户2049375549533 分钟前
从“能识别”到“稳定识别”:离线ASR在真实会议场景中的问题与工程优化实践
算法
YSL0701241 小时前
OpenCode保姆级安装教程
数据结构
鹿角片ljp1 小时前
LeetCode 148:排序链表|归并排序、快慢指针找左中点与链表断开
算法
LabVIEW开发1 小时前
LabVIEW字符串特殊字符检测兼容
算法·labview·labview知识·labview功能·labview程序
晴天的雨.9922 小时前
[C++算法]快乐数
数据结构·c++·算法
孤狼warrior2 小时前
SCTR 五次失败的安全 BN 路由器
人工智能·python·深度学习·算法·安全·yolo
影视飓风TIM2 小时前
C++11 核心新特性完整梳理
数据结构·c++·算法