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

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

55. 跳跃游戏


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

问题描述:

给定一个非负整数数组 nums,其中 nums[i] 表示从位置 i 最多可以跳跃的步数。
从起点 0 出发,判断是否能够到达最后一个位置


解题思路:

  1. 设一个变量 mx 表示目前能跳到的最远位置索引(初始为 0);
  2. 从左往右遍历每个索引 i
    • 如果当前位置 i 已经超过了当前最远能跳的位置 mx,说明跳不到这里,返回 False
    • 否则,更新最远可达位置 mx = max(mx, i + nums[i])
    • 如果最远位置已经大于等于终点(len(nums) - 1),说明可以到达终点,提前返回 True
  1. 如果遍历结束也没有提前返回 True,表示终点不可达,默认返回 False(此代码中漏了 return,但符合题意的测试数据一定会在中途 return)。

二、算法核心点

✅ 核心思想:贪心 + 动态维护最远可达索引

  • 每次更新目前为止能跳到的最远位置;
  • 如果当前下标不可达(即 i > mx),则直接失败;
  • 一旦最远可达位置覆盖到终点,立即返回成功;
  • 本质是将原本可能用 DFS/BFS 的可达性问题,用贪心方式优化为线性扫描
class Solution:def canJump(self, nums: List[int]) -> bool:mx = 0for i, jump in enumerate(nums):if i >mx:return Falsemx = max(mx, i+jump)if mx>len(nums)-1:return True

三、复杂度分析

  • 时间复杂度:O(n)
    只遍历了一次数组,每个元素处理一次;
  • 空间复杂度:O(1)
    只使用了一个整型变量 mx

总结表:

维度

内容

✅ 思路逻辑

从左向右遍历,维护最远可达位置,遇到不可达立即返回 False

✅ 核心技巧

贪心更新最远跳跃索引,判断当前位置是否可达,提早终止

✅ 时间复杂度

O(n)

✅ 空间复杂度

O(1)

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

相关文章:

  • day68—DFS—二叉树的所有路径(LeetCode-257)
  • 贪心算法题解——划分字母区间【LeetCode】
  • 【LeetCode453.最小操作次数使数组元素相等】
  • 代码训练LeetCode(45)旋转图像
  • 【Linux-云原生-笔记】Apache相关
  • 【Modern C++ Part9】Prefer-alias-declarations-to-typedefs
  • 内网穿透系列九:开源的网络穿透与组网工具 EasyTier,支持多种数据传输通道,去中心化,兼具高效与安全
  • Kafka Schema Registry:数据契约管理的利器
  • 对日开发 秀丸文本编辑器 添加文本变换模块
  • 聊一聊Spring框架接口测试常见场景有哪些?
  • 学习C++、QT---22(QT中QTextStream库读取文件、写入文件的讲解)
  • docker搭建 与镜像加速器
  • win10安装Rust Webassembly工具链(wasm-pack)报错。
  • C++中Lambda表达式 [ ] 的写法
  • AI 时代的分布式多模态数据处理实践:我的 ODPS 实践之旅、思考与展望
  • 深入解析 Stack 和 Queue:从原理到实战应用
  • 每日算法刷题Day46 7.12:leetcode前缀和3道题和差分2道题,用时1h30min
  • pgsql模板是什么?
  • Redis Geospatial 功能详解及多边形包含判断实现
  • 【JVM|类加载】第三天
  • 专业硬件检测工具 AIDA64 Extreme V7.70.7500 至尊版
  • 12. JVM的垃圾回收器
  • 1. 好的设计原则
  • Java应用全链路故障排查实战指南:从系统资源到JVM深度诊断
  • 钉钉小程序开发环境配置与前端开发指南
  • 【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
  • 关于 验证码系统 详解
  • Ubuntu安装Jenkins
  • Java文件传输要点
  • 大数据在UI前端的应用深化研究:用户行为数据的时序模式挖掘