news 2026/5/11 10:52:27

LeetCode 跳跃游戏 II 最优解法:贪心算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 跳跃游戏 II 最优解法:贪心算法

在刷LeetCode的过程中,跳跃游戏 II(Jump Game II) 是一道经典的贪心算法题目,要求我们以最少的跳跃次数到达数组的最后一个位置。这篇文章将详细讲解如何用贪心思想高效解决这个问题,全程使用Java代码实现,思路清晰且时间复杂度最优。

题目回顾

给定一个长度为 n的非负整数数组 nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个下标。

说明:假设你总是可以到达数组的最后一个位置。

解题思路:贪心算法

核心思想是每一步都选择能跳得最远的位置,从而最小化跳跃次数。我们通过三个关键变量来实现这个思路:

  • mx:记录当前位置能够到达的最远位置
  • last:记录上一次跳跃后到达的边界位置(即上一次跳跃的终点);
  • ans:记录跳跃的总次数。

具体执行步骤:

  1. 遍历数组的前n-2个位置(因为到达倒数第二个位置时,最后一次跳跃必然能到终点);
  2. 对每个位置i,计算i + nums[i](当前位置能跳到的最远位置),并更新mx为全局最大值;
  3. 当遍历到last(上一次跳跃的边界)时,说明需要进行一次新的跳跃:
    • last更新为当前能到达的最远位置mx
    • 跳跃次数ans加 1;
  4. 遍历结束后,ans即为最少跳跃次数。

Java代码实现:

class Solution { public int jump(int[] nums) { // 边界处理:数组长度为1时,无需跳跃 if (nums == null || nums.length <= 1) { return 0; } int n = nums.length; int mx = 0; // 当前能到达的最远位置 int last = 0; // 上一次跳跃的边界位置 int ans = 0; // 跳跃次数 // 遍历到n-2即可,因为到n-1已经是终点,无需再跳 for (int i = 0; i < n - 1; i++) { // 更新当前能到达的最远位置 mx = Math.max(mx, i + nums[i]); // 到达上一次跳跃的边界,需要跳一次 if (i == last) { last = mx; // 新的边界是当前能到达的最远位置 ans++; // 跳跃次数+1 // 提前终止:如果当前最远位置已经能到终点,无需继续遍历 if (mx >= n - 1) { break; } } } return ans; } }

代码解析

  1. 边界处理:如果数组长度小于等于 1,直接返回 0(起点就是终点,无需跳跃);
  2. 变量初始化mx初始为 0(初始能到达的最远位置),last初始为 0(初始跳跃边界是起点),ans初始为 0(初始跳跃次数);
  3. 核心遍历
    • 遍历范围是[0, n-2],因为当i = n-1时已经到达终点,无需处理;
    • 每次计算i + nums[i]并更新mx,确保mx始终是当前能到达的最远位置;
    • i到达上一次跳跃的边界last时,说明必须跳一次:更新last为新的最远边界mx,并增加跳跃次数;
  4. 提前终止优化:如果mx已经能覆盖到数组最后一个位置,直接跳出循环,减少不必要的遍历。

复杂度分析

  • 时间复杂度O(n),仅需遍历数组一次,每个元素最多被访问一次;
  • 空间复杂度O(1),仅使用了常数个变量,没有额外的空间开销。

示例验证

nums = [2,3,1,1,4]为例:

  • 初始:mx=0, last=0, ans=0
  • i=0mx = max(0, 0+2)=2i==last,更新last=2ans=1
  • i=1mx = max(2, 1+3)=4i≠last
  • i=2mx = max(4, 2+1)=4i==last,更新last=4ans=2;此时mx=4 >= 4(数组最后一个位置),提前终止;
  • 最终返回ans=2,符合预期。

总结

  1. 本题的核心是贪心策略:每一步都选择能跳得最远的位置,从而最小化跳跃次数;
  2. 通过mx记录最远可达位置、last记录跳跃边界,能在一次遍历中完成计算,时间复杂度最优;
  3. Java 代码实现中加入了边界处理和提前终止优化,进一步提升了代码的健壮性和效率。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 8:55:08

零基础玩转XNB文件处理:从入门到精通的完整指南

零基础玩转XNB文件处理&#xff1a;从入门到精通的完整指南 【免费下载链接】xnbcli A CLI tool for XNB packing/unpacking purpose built for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/xn/xnbcli 一、XNB工具基础入门&#xff1a;轻松掌握游戏资源处…

作者头像 李华
网站建设 2026/5/11 6:17:38

AI生产力工具:10大免费与付费AIGC平台功能解析

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

作者头像 李华
网站建设 2026/5/10 15:26:49

AIGC工具推荐:10款免费与付费方案的性能对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

作者头像 李华
网站建设 2026/5/11 6:18:10

UAssetGUI:虚幻引擎资产全流程处理工具深度指南

UAssetGUI&#xff1a;虚幻引擎资产全流程处理工具深度指南 【免费下载链接】UAssetGUI A tool designed for low-level examination and modification of Unreal Engine 4 game assets by hand. 项目地址: https://gitcode.com/gh_mirrors/ua/UAssetGUI 一、核心功能解…

作者头像 李华
网站建设 2026/5/10 10:26:51

2025-2026销售商机管理AI工具推荐:优选 DingTalk A1软硬一体方案

IDC在《未来销售白皮书》&#xff08;2025年&#xff09;中预测&#xff0c;至2026年&#xff0c;约四分之三的全球销售组织将处于“数据充裕却洞察不足”的处境——大量客户交互数据未能转化为切实可行的销售指引。与此同时&#xff0c;跨渠道、多形态的客户沟通&#xff08;如…

作者头像 李华
网站建设 2026/5/9 13:23:16

互联网大厂Java求职面试实录:Spring Boot、微服务与AI技术全景解析

互联网大厂Java求职面试实录&#xff1a;Spring Boot、微服务与AI技术全景解析 本文通过模拟一场互联网大厂Java求职者谢飞机的面试&#xff0c;场景涵盖音视频、内容社区与UGC、AIGC等业务场景。面试官以严肃专业的态度提问&#xff0c;谢飞机虽为水货程序员&#xff0c;但能回…

作者头像 李华