力扣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,无需遍历剩余元素,提升算法效率。
相关推荐
张张努力变强17 分钟前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
万岳科技系统开发17 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
张登杰踩22 分钟前
MCR ALS 多元曲线分辨算法详解
算法
YuTaoShao32 分钟前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法
波波00739 分钟前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
风暴之零1 小时前
变点检测算法PELT
算法
深鱼~1 小时前
视觉算法性能翻倍:ops-cv经典算子的昇腾适配指南
算法·cann
李斯啦果1 小时前
【PTA】L1-019 谁先倒
数据结构·算法
梵刹古音1 小时前
【C语言】 指针基础与定义
c语言·开发语言·算法
啊阿狸不会拉杆1 小时前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法