news 2026/4/23 15:52:02

跳跃游戏 II | 贪心算法最优解(最少跳跃次数)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
跳跃游戏 II | 贪心算法最优解(最少跳跃次数)

跳跃游戏 II | 贪心算法最优解(最少跳跃次数)

题目描述

给定一个长度为n的 0 索引整数数组nums,初始位置为数组下标 0。数组中每个元素nums[i]表示从下标i处可以向前跳跃的最大长度,即若处于索引i,可跳跃到任意满足i < j < nj ≤ i + nums[i]的索引j。要求返回到达数组最后一个下标n-1最小跳跃次数,题目保证一定可以到达最后一个下标。

核心特征分析

  1. 数组类问题的算法选择优先级:贪心算法 > 动态规划(尤其当问题仅需“最优结果”而非“所有路径”时);
  2. 本题中“每个元素代表可跳跃的最大长度”是贪心算法的典型适配场景——无需记录所有跳跃路径,只需通过“局部最优选择”即可推导“全局最优解”(最少跳跃次数)。

算法选择与思路

算法选择

选择贪心算法作为最优解,核心原因如下:

  • 动态规划需维护数组记录每个位置的最少步数,时间复杂度O ( n 2 ) O(n^2)O(n2)、空间复杂度O ( n ) O(n)O(n),效率较低;
  • 贪心算法仅需常数级变量记录关键状态,时间复杂度O ( n ) O(n)O(n)、空间复杂度O ( 1 ) O(1)O(1),且能直接推导最少跳跃次数,是本题的最优解法。

贪心算法核心思路

关键变量定义
  • step:记录已完成的跳跃次数;
  • current:当前跳跃范围内能到达的最远边界(即本次跳跃的“终点”);
  • max_length:遍历过程中能到达的全局最远索引(所有可达位置中能跳的最远位置)。
算法执行步骤
  1. 初始化step = 0current = 0max_length = 0(补充边界处理:若数组长度≤1,无需跳跃,直接返回0);
  2. 遍历数组中的每个索引i
    • 刷新全局最远可达索引:max_length = max(max_length, i + nums[i])
    • i == current(遍历到当前跳跃的边界),说明必须完成一次跳跃:
      ① 跳跃次数加1:step++
      ② 更新下一次跳跃的边界:current = max_length
    • current ≥ n-1(当前边界已覆盖最后一个下标),提前终止遍历(无需继续计算);
  3. 遍历结束后返回step

完整解题代码

classSolution{public:intjump(vector<int>&nums){intn=nums.size();// 边界处理:数组长度≤1时,初始位置即为终点,无需跳跃if(n<=1)return0;intstep=0;// 最少跳跃次数intcurrent=0;// 当前跳跃的最远边界intmax_length=0;// 全局能到达的最远索引for(inti=0;i<n;i++){// 更新全局最远可达位置max_length=max(max_length,i+nums[i]);// 到达当前跳跃边界,必须完成一次跳跃if(current==i){step++;current=max_length;}// 提前终止:已能到达最后一个下标,无需继续遍历if(current>=n-1)break;}returnstep;}};

复杂度分析

  • 时间复杂度O ( n ) O(n)O(n)。仅需遍历一次数组,n为数组长度,遍历过程中所有操作均为常数级;
  • 空间复杂度O ( 1 ) O(1)O(1)。仅使用stepcurrentmax_length三个常数级变量,无额外空间开销。

总结

  1. 贪心算法解决“跳跃游戏 II”的核心是以“当前跳跃边界”为触发条件,每到边界就完成一次跳跃,并将下一次边界更新为全局最远可达位置;
  2. 该解法通过“局部最优(每次跳最远)”实现“全局最优(最少次数)”,时间/空间复杂度均为最优;
  3. 边界场景处理(如数组长度≤1)是保证代码健壮性的关键,需结合题目条件补充。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:37:02

硬盘数据损坏分析

&#xff08;一&#xff09;硬盘数据损坏常见的软件故障软件故障导致的数据损坏通常源于系统层面或用户操作层面的异常&#xff0c;其核心特征为存储介质物理结构未受损&#xff0c;但数据逻辑结构或访问路径被破坏。以下是典型分类及技术细节&#xff1a;逻辑错误与文件系统损…

作者头像 李华
网站建设 2026/4/23 12:17:54

heritrix3爬虫高效抓取与配置指南

网络爬虫是获取互联网信息的基础工具&#xff0c;而Heritrix 3是一个在数字存档和网络采集领域备受推崇的开源框架。它专为大规模、高保真度的网页抓取而设计&#xff0c;尤其被图书馆、档案馆和研究机构用于构建网络历史快照。理解它的核心特性、配置方法以及如何解决常见问题…

作者头像 李华
网站建设 2026/4/23 12:10:40

商城小程序开源商用_OctShop免费开源可商用的商城小程序

在移动互联网大趋势的当下&#xff0c;商城小程序已成为企业拓展线上业务的重要阵地。而 “商城小程序开源商用” 这一模式&#xff0c;正凭借其独特的优势逐渐受到市场青睐。它指的是企业或开发者借助开源的商城小程序代码&#xff0c;进行二次开发、定制优化后&#xff0c;将…

作者头像 李华
网站建设 2026/4/23 12:15:58

基于Simulink的智能车辆电子稳定控制(ESC)仿真

目录 手把手教你学Simulink 一、引言:为什么“智能汽车需要ESC”? 二、ESC 系统架构总览 输入(驾驶员 + 环境): 输出(控制指令): 三、关键原理:理想横摆角速度模型 四、车辆动力学模型(含轮胎非线性) 侧向力: 侧偏角: 运动方程: 五、ESC 控制器设计:滑…

作者头像 李华
网站建设 2026/4/23 12:22:07

MySQL必备基础

MySQL 必备基础&#xff08;2025-2026 生产视角最实用版本&#xff09; 以下内容把绝大多数公司在面试、接手项目、日常维护中最常遇到的 MySQL 核心知识点浓缩成一份“速查 理解 避坑”清单&#xff0c;适合快速建立完整认知框架。 一、MySQL 架构与存储引擎&#xff08;必…

作者头像 李华
网站建设 2026/4/23 11:54:13

基于掩码SM4算法的选择明文相关碰撞攻击方法与流程MatlabSimulink优化算,设计程序模型文档报告测试定制(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于掩码SM4算法的选择明文相关碰撞攻击方法与流程MatlabSimulink优化算,设计程序模型文档报告测试定制(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码(1)遗传GA算法,粒子群PSO算法,退火SA算法,蜂群ABC算法,鱼群FSA算法,灰狼G…

作者头像 李华