力扣hot100:跳跃游戏

题目描述:

贪心算法思想:

贪心算法的核心是每一步都做出当前状态下的局部最优选择,最终期望得到全局最优解。对于本题,局部最优策略是:在遍历过程中,持续维护 "当前能到达的最大索引",每到一个位置,就更新这个最大索引(取当前最大索引与 "当前位置 + 当前位置能跳的最大长度" 的较大值)。通过这种局部最优的更新,最终判断是否能覆盖到数组的最后一个索引。

思路解析:

要判断能否到达数组最后一个下标,关键在于跟踪 "能到达的最远位置",具体思路如下:

  1. 初始化最大可达索引:从数组第一个元素开始,初始最大可达索引为0(起始位置)。
  2. 遍历数组的每个位置:
    • 若当前遍历的索引i超过了 "当前能到达的最大索引",说明该位置无法到达,直接返回false
    • 否则,更新 "能到达的最大索引"(取当前最大索引与i + nums[i]的较大值,i + nums[i]是从当前位置i能跳到的最远位置)。
    • 若更新后的最大索引已经覆盖了数组的最后一个下标(即maxLength >= n-1),直接返回true(提前终止,提升效率)。
  3. 遍历结束:若顺利遍历完所有位置,说明最后一个下标可到达,返回true

代码:

java 复制代码
class Solution {
    public boolean canJump(int[] nums) {
        int n = nums.length; // 获取数组长度
        if (n == 0) { // 处理空数组的边界情况
            return false;
        }
        int maxLength = 0; // 记录当前能到达的最大索引
        for (int i = 0; i < n; i++) { // 遍历数组的每个位置
            // 若当前索引超过了能到达的最大范围,说明无法到达后续位置,返回false
            if (i > maxLength) {
                return false;
            }
            // 更新能到达的最大索引:取当前最大索引 与 "当前位置+当前位置能跳的最大长度"的较大值
            maxLength = Math.max(maxLength, i + nums[i]);
            // 若最大索引已覆盖最后一个下标,直接返回true(提前终止)
            if (maxLength >= n - 1) {
                return true;
            }
        }
        return true; // 遍历完成后,说明最后一个下标可到达
    }
}

代码解析:

  • 边界处理:if (n == 0) 处理空数组场景,避免后续逻辑出错。
  • 遍历与合法性判断:if (i > maxLength) 是核心判断 ------ 若当前位置i不在 "能到达的范围" 内,说明无法继续前进,直接返回false
  • 贪心更新最大可达索引:maxLength = Math.max(maxLength, i + nums[i]) 是贪心策略的体现 ------ 每一步都尽可能扩大 "能到达的范围",保证局部最优。
  • 提前终止:if (maxLength >= n - 1) 一旦最大范围覆盖了最后一个下标,立即返回true,无需遍历剩余元素,提升算法效率。
相关推荐
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ01 天前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法