当前位置: 首页 > 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.xdnf.cn/news/1108765.html

相关文章:

  • 死锁的避免
  • LangChain 内存(Memory)
  • 创建uniapp项目引入uni-id用户体系使用beforeRegister钩子创建默认昵称
  • 9. JVM垃圾回收
  • 12. JVM的垃圾回收器
  • Agent 设计模式
  • 前后端分离项目的完整部署(Jenkins自动化部署)
  • 【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
  • 27.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--币种服务(一)
  • Android下一个简单的定时器,每隔一秒输出一个数字
  • Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
  • vue3 canvas 选择器 Canvas 增加页面性能
  • Kimi K2万亿参数开源模型原理介绍
  • 【论文阅读】HCCF:Hypergraph Contrastive Collaborative Filtering
  • 缓存三剑客解决方案
  • 【C语言】回调函数、转移表、qsort 使用与基于qsort改造冒泡排序
  • 利用docker部署前后端分离项目
  • 敏捷开发方法全景解析
  • SQL server之版本的初认知
  • C#枚举:从基础到高级的全方位解析
  • 《通信原理》学习笔记——第一章
  • 《Spring 中上下文传递的那些事儿》Part 11:上下文传递最佳实践总结与架构演进方向
  • 基于MCP的CI/CD流水线:自动化部署到云平台的实践
  • Vue Vue-route (5)
  • Adobe Illustrator关于图标创建的问题
  • 【跟我学运维】chkconfig jenkins on的含义
  • 初等行变换会改变矩阵的什么?不变改变矩阵的什么?求什么时需要初等行变换?求什么时不能初等行变换?
  • 回归(多项式回归)
  • 电网通俗解析术语2:一二次设备关联
  • 【PycharmPyqt designer桌面程序设计】