跳跃游戏 II (贪心, 动态规划)

题目描述(力扣45题) :

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

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

  • 0 <= j <= nums[i]

  • i + j < n

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

解题思路:

  • 以2, 3, 1, 1, 4 为例

  • 首先从 0 索引位置出发, 可以跳到 1, 2 索引

  • 1 索引的 3 刚好可以到达最后一个位置的4, 二 2 索引的1 只能到达 3 索引的 1, 所以选择从 1 索引的 3 跳跃, 一共跳两次, 返回 2

  • 简单来说, 就是在本次的跳跃范围以内, 找出下次跳跃距离最远的那一个索引(位置).

解题步骤:

  • int length = nums.length; 获取数组的长度,用于控制循环范围。

  • int end = 0; 这个变量记录了当前跳跃的范围的最远位置。

  • int maxPosition = 0; 这个变量记录了当前跳跃范围内能够到达的最远位置。

  • int steps = 0; 这个变量记录了跳跃的步数。

  • for (int i = 0; i < length - 1; i++) {这是一个循环,从数组的第一个位置开始,遍历到倒数第二个位置。因为在循环中会访问 nums[i+1],所以循环的终止条件是 i < length - 1。

  • maxPosition = Math.max(maxPosition, i + nums[i]);更新当前跳跃范围内能够到达的最远位置。i + nums[i] 表示从当前位置能够跳跃到的最远位置,通过 Math.max 来更新 maxPosition。

  • if (i == end) {如果当前位置 i 达到了之前记录的跳跃范围的最远位置 end,说明需要进行下一次跳跃了。

以下是代码实现:

复制代码
```java
class Solution {
    public int jump(int[] nums) {
        int end = 0;
        int maxLocal = 0;
        int step = 0;
        for(int i = 0; i <= end && end < nums.length - 1; i++) {
            maxLocal = Math.max(maxLocal, i + nums[i]);
            if(i == end) {
                end = maxLocal;
                step++;
            }
        }

        return step;
    }
}
```
  • 以上是本篇文章的全部内容, 感谢观看
相关推荐
打码的老程是远篁17 分钟前
手把手教你玩转大模型——3. Transformer 的位置编码——模型怎么知道谁在前,谁在后?
人工智能·算法
嘎嘎风18 分钟前
MiniMind 学习笔记之 06 一张图、一百行:MiniMind 的骨架
算法·源码
用户73416810354821 分钟前
只盯被动响应做状态监测?论“控制信号”在变工况故障诊断中的重要作用
算法
Ivanqhz23 分钟前
MQA、GQA、稀疏/滑动窗口注意力及混合范式
人工智能·算法·机器学习
罗湖老棍子32 分钟前
荒岛野人(信息学奥赛一本通- P1637)(洛谷-P2421)
算法·数论·枚举·裴蜀定理·扩展欧几里得·扩展中国剩余定理
朝朝辞暮i36 分钟前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2
400分44 分钟前
具身智能系列之从零到「机械臂会放试管」:π0.5 VLA 真机部署完全指南【第一节】
算法
小宋10211 小时前
一套服务托管多个 LoRA:适配器加载、租户隔离与热切换实战
大数据·人工智能·算法
Rosanci1 小时前
Codex 下载与本地部署实战:从安装到运行全流程指南
开发语言·前端·算法·chatgpt·codex
我爱工作&工作love我1 小时前
P14358 [CSP-J 2025] 座位
算法