【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;
    }
}
相关推荐
百度Geek说20 分钟前
第一!百度智能云领跑视觉大模型赛道
算法
big_eleven26 分钟前
轻松掌握数据结构:二叉树
后端·算法·面试
big_eleven29 分钟前
轻松掌握数据结构:二叉查找树
后端·算法·面试
CoovallyAIHub39 分钟前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·计算机视觉
执子手 吹散苍茫茫烟波39 分钟前
LCR 076. 数组中的第 K 个最大元素
leetcode·排序算法
kyle~2 小时前
OpenCV---特征检测算法(ORB,Oriented FAST and Rotated BRIEF)
人工智能·opencv·算法
初学小刘2 小时前
决策树:机器学习中的强大工具
算法·决策树·机器学习
山顶风景独好2 小时前
【Leetcode】随笔
数据结构·算法·leetcode
科大饭桶3 小时前
C++入门自学Day11-- String, Vector, List 复习
c语言·开发语言·数据结构·c++·容器
lxmyzzs3 小时前
【图像算法 - 16】庖丁解牛:基于YOLO12与OpenCV的车辆部件级实例分割实战(附完整代码)
人工智能·深度学习·opencv·算法·yolo·计算机视觉·实例分割