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

黄金挑战-跳跃游戏问题

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
        
相关推荐
大胆飞猪3 小时前
递归、剪枝、回溯算法---全排列、子集问题(力扣.46,78)
算法·leetcode·剪枝
Kisorge5 小时前
【电机控制】基于STM32F103C8T6的二轮平衡车设计——LQR线性二次线控制器(算法篇)
stm32·嵌入式硬件·算法
铭哥的编程日记6 小时前
深入浅出蓝桥杯:算法基础概念与实战应用(二)基础算法(下)
算法·职场和发展·蓝桥杯
Swift社区6 小时前
LeetCode 421 - 数组中两个数的最大异或值
算法·leetcode·职场和发展
cici158746 小时前
基于高光谱成像和偏最小二乘法(PLS)的苹果糖度检测MATLAB实现
算法·matlab·最小二乘法
StarPrayers.7 小时前
自蒸馏学习方法
人工智能·算法·学习方法
大锦终7 小时前
【动规】背包问题
c++·算法·动态规划
智者知已应修善业8 小时前
【c语言蓝桥杯计算卡片题】2023-2-12
c语言·c++·经验分享·笔记·算法·蓝桥杯
hansang_IR8 小时前
【题解】洛谷 P2330 [SCOI2005] 繁忙的都市 [生成树]
c++·算法·最小生成树
Croa-vo9 小时前
PayPal OA 全流程复盘|题型体验 + 成绩反馈 + 通关经验
数据结构·经验分享·算法·面试·职场和发展