当前位置: 首页 > 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.dtcms.com/a/275517.html

相关文章:

  • AI大模型(七)Langchain核心模块与实战(二)
  • Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染
  • CTFHub————Web{信息泄露[Git泄露(log)]}
  • 《Java Web程序设计》实验报告五 Java Script学习汇报
  • Redis Geospatial 功能详解及多边形包含判断实现
  • win10安装Rust Webassembly工具链(wasm-pack)报错。
  • Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库
  • Rust Web 全栈开发(六):在 Web 项目中使用 MySQL 数据库
  • 前端note
  • 【推荐】前端低端机和弱网环境下性能优化
  • 前端面试专栏-算法篇:24. 算法时间与空间复杂度分析
  • 在前端开发中关于reflow(回流)和repaint(重绘)的几点思考
  • MySQL 中图标字符存储问题探究:使用外挂法,毕业论文——仙盟创梦IDE
  • AI驱动的大前端内容创作与个性化推送:资讯类应用实战指南
  • 容器化改造避坑指南:传统应用迁移K8s的10个关键节点(2025实战复盘)
  • CSS flex
  • Capsule Networks:深度学习中的空间关系建模革命
  • GGE Lua 详细教程
  • 《Java Web程序设计》实验报告四 Java Script前端应用和表单验证
  • 基于Java的Markdown到Word文档转换工具的实现
  • 基于大模型的鼻咽癌全周期预测及诊疗优化研究报告
  • EPLAN 电气制图(七):电缆设计全攻略
  • 系统学习Python——并发模型和异步编程:基础实例-[使用进程实现旋转指针]
  • 代码训练LeetCode(45)旋转图像
  • 【算法笔记】7.LeetCode-Hot100-图论专项
  • 【node/vue】css制作可3D旋转倾斜的图片,朝向鼠标
  • 每日算法刷题Day46 7.12:leetcode前缀和3道题和差分2道题,用时1h30min
  • 代码训练LeetCode(46)旋转图像
  • Python爬虫实战:研究python-docx库相关技术
  • AI软件出海SEO教程