当前位置: 首页 > news >正文

贪心算法题解——跳跃游戏 II【LeetCode】

45. 跳跃游戏 II


一、算法逻辑(逐步思路)

问题描述:

给定一个非负整数数组 nums,其中 nums[i] 表示从位置 i 最多可以跳跃的步数,起点在 0,终点在 n - 1
目标是 使用最少的跳跃次数跳到终点,返回这个最小值。


解题思路:

  1. 维护两个变量:
    • cur_right:当前这次跳跃能到达的最远位置(当前“桥”右端);
    • next_right:下一次跳跃可能到达的最远位置(“下一座桥”右端);
    • ans:记录跳跃次数。
  1. 遍历数组的每个位置(注意 不遍历最后一个位置):
    • 不断更新下一次跳跃的最远位置,即 next_right = max(next_right, i + nums[i])
    • 如果当前下标 i 刚好到达了 cur_right,说明当前跳跃范围已用完,必须跳一次,更新 cur_right = next_rightans += 1
  1. 最后返回跳跃次数 ans,即可得到最少跳跃步数。

二、算法核心点

✅ 核心思想:贪心 + 层级跳跃区间划分

  • 将整个跳跃过程视为“逐层建桥”,每一次跳跃把当前位置与能到达的最远端看作一个“可跳跃区域”;
  • 当当前位置到达当前跳跃范围的尽头时,说明需要进行一次新的跳跃;
  • 这其实就是BFS 的按层遍历思想的贪心实现版本
    • 一层一跳,寻找下一层最远边界;
    • 不需要记录路径,只关心跳跃次数。

这也是这类跳跃问题中经典的 “区间推进”贪心模型

class Solution:def jump(self, nums: List[int]) -> int:ans = 0cur_right = 0next_right = 0for i in range(len(nums)-1):next_right = max(next_right, i+nums[i])# 遍历的过程中,动态的更新记录 下一座桥的最远点if i == cur_right:  # 无路可走,必须建桥cur_right = next_right # 更新可以到达的最远距离ans += 1return ans

三、复杂度分析

  • 时间复杂度:O(n)
    只遍历了数组一遍,且每个位置处理一次。
  • 空间复杂度:O(1)
    只用了常数个变量(ans, cur_right, next_right)。

总结表:

维度

内容

✅ 思路逻辑

每次跳跃更新当前最远能到达的位置,到达边界后跳一次

✅ 核心技巧

贪心模拟 BFS 层级遍历,按“跳跃区间”更新跳数

✅ 时间复杂度

O(n)

✅ 空间复杂度

O(1)

http://www.lryc.cn/news/586121.html

相关文章:

  • 电商订单数据分析全流程:从数据处理到可视化洞察
  • AI产品经理面试宝典第11天:传统软件流程解析与AI产品创新对比面试题与答法
  • 网络连接:拨号连接宽带PPPOE
  • 维基艺术图片: python + scrapy 爬取图片
  • 物联网设备数据驱动3D模型的智能分析与预测系统
  • 深入理解 QSettings:Qt 中的应用程序配置管理
  • 多线程的区别和联系
  • SQL server之版本的初认知
  • linux系统----LVS负载均衡集群(NET/DR)模式
  • docker-compose方式搭建lnmp环境——筑梦之路
  • 【LeetCode】算法详解#8 ---螺旋矩阵
  • .gitignore
  • JVM 类加载过程
  • 安全初级作业1
  • Docker-镜像构建原因
  • 十三、K8s自定义资源Operator
  • Java面试基础:面向对象(1)
  • 快速建立UI网站
  • 面试150 翻转二叉树
  • Linux:信号
  • 免费用Claude code薅羊毛
  • c++11——移动语义的举例说明
  • 三维渲染中的抗锯齿技术
  • TinyBERT:知识蒸馏驱动的BERT压缩革命 | 模型小7倍、推理快9倍的轻量化引擎
  • 9.4 自定义SMC服务开发
  • STM32第二十一天定时器TIM
  • Windows环境下解决Matplotlib中文字体显示问题的详细指南
  • 人工智能之数学基础:多元逻辑回归算法的矩阵参数求导
  • Spring(四) 关于AOP的源码解析与思考
  • 【Flask】基础入门