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

黄金挑战-跳跃游戏问题

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
        
相关推荐
冻柠檬飞冰走茶6 分钟前
PTA基础编程题目集 7-11 分段计算居民水费(C语言实现)
c语言·开发语言·算法
得物技术6 分钟前
推荐系统体验的数字化突破:得物自动化评测平台的技术实践|AICon 文章整理
算法·架构·llm
VALENIAN瓦伦尼安教学设备23 分钟前
转子/行星/平行轴齿轮箱综合故障模拟实验台可复现常见机械问题
大数据·数据库·人工智能·嵌入式硬件·算法
rannn_11130 分钟前
【力扣hot100】哈希表专题——从两数之和到最长连续序列
java·算法·leetcode·哈希
小保CPP1 小时前
OpenCV C++基于极值区域滤波算法的场景文本检测(OCR)
c++·人工智能·opencv·算法·计算机视觉·ocr
来一碗刘肉面1 小时前
字符串模式匹配(朴素模式匹配算法与KMP算法)
数据结构·算法
dyxal2 小时前
eˣ 的泰勒展开式:从“化繁为简”到“万物统一”的微积分之美
算法
BetterFlow_CFD2 小时前
COMSOL声学仿真基础知识(二)
开发语言·算法·matlab
徐小夕13 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github