算法通关村第十七关:黄金挑战-跳跃游戏问题

黄金挑战-跳跃游戏问题

1. 跳跃游戏

LeetCode 55
https://leetcode.cn/problems/jump-game/

思路分析

关键是判断能否到达终点,不用管每一步跳跃到哪里,而是尽可能的跳跃到最远的位置

看最多能覆盖到哪里,只要不断更新能覆盖的距离,最后能覆盖到末尾就行了

具体执行:

  1. 定义一个cover表示能最远达到的方位,i每次移动只能在其 cover 范围内移动
  2. 每移动一次,根据该元素值重新更新cover,cover = max(该元素补充后范围,cover本身范围)
  3. 如果cover大于等于终点下标,返回ture

代码实现

python 复制代码
class Solution:
    def canJump(self, nums: List[int]) -> bool:
        cover = 0
        n = len(nums)
        for i in range(n):
            # 判断是能能够到达 i 的位置
            if cover < i:
                return False
            cover = max(i + nums[i], cover)
            if cover >= n - 1:
                return True
        return False

2. 最短跳跃游戏

LeetCode 45
https://leetcode.cn/problems/jump-game-ii/

思路分析

贪心+双指针

设置四个变量

  • left 一步步遍历数组
  • steps 记录到达当前位置的最少步数
  • right 表示当前步数能够覆盖到的最大范围
  • left到达right时,更新right,step+1



代码实现

python 复制代码
class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        steps = 0
        max_position = 0
        right = 0

        for left in range(n-1):
            max_position = max(max_position, nums[left] + left)
            if left == right:
                right = max_position
                steps += 1

        return steps
        
相关推荐
lvxiangyu112 小时前
MPPI 算法证明重构:基于无穷维泛函变分与 KL 散度的构造性推导
算法·重构·最优控制·随机最优控制
2301_818419012 小时前
C++中的解释器模式变体
开发语言·c++·算法
ab1515172 小时前
3.25完成*23、*24、*28、*30、*33、*38、*39、*40
算法
颜酱2 小时前
回溯算法实战练习(3)
javascript·后端·算法
CDN3603 小时前
360CDN 全系列产品体验:CDN / 高防 / SDK 游戏盾横向测评
运维·安全·游戏
小王不爱笑1324 小时前
G1 GC 的核心基础:Region 模型的补充细节
java·jvm·算法
小王不爱笑1325 小时前
三色标记算法
算法
小O的算法实验室5 小时前
2026年AST SCI1区TOP,基于速度障碍法的多无人机三维避障策略,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
CDN3605 小时前
中小团队加速 + 防护方案:360CDN+SDK 游戏盾实测
运维·游戏·网络安全
U-52184F696 小时前
深入理解“隐式共享”与“写时复制”:从性能魔法到内存深坑
java·数据库·算法