跳跃游戏合集

  • [leetcode 55 跳跃游戏](https://leetcode-cn.com/problems/jump-game/)
    • 一、贪心算法求解
      • 1.1 求解思路
      • 1.2 代码实现
      • 1.3 复杂度
    • 二、动态规划求解
      • 2.1 求解思路——五部曲
      • 2.2 代码实现
      • 2.3 复杂度

leetcode 55 跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。
示例1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标

示例2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后
一个下标。

提示:

一、贪心算法求解

1.1 求解思路

我们可以用贪心的方法解决这个问题。

对于每一个可以到达位置的索引为idxidxidx,它使得 idx+1,idx+2,⋯,idx+nums[idx]idx+1, idx+2, \cdots, idx+\textit{nums}[idx]idx+1,idx+2,⋯,idx+nums[idx] 这些最大覆盖范围内的位置都可以到达。

依次遍历数组中的每一个位置,并实时更新该位置的最大覆盖范围。对于当前遍历到的位置 xxx,如果它在最大覆盖范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用 idx+nums[idx]idx + \textit{nums}[idx]idx+nums[idx]更新最远可以到达的位置。

在遍历的过程中,如果最大覆盖范围大于等于数组中的最后一个位置,那就说明最后一个位置可达,我们就可以直接返回 True 作为答案。反之,如果在遍历结束后,最后一个位置仍然不可达,我们就返回 False 作为答案。

1.2 代码实现

class Solution:def canJump(self, nums: List[int]) -> bool:right_most = 0  # 记录最大覆盖范围for idx, val in enumerate(nums[:-1]): # 忽略最后一个位置right_most = max(right_most, idx+val)  # 当前位置上,最远能跳到哪# 如果最远都无法超过当前位置,那肯定无法到达最后一个位置,提前结束if right_most <= idx:return False return True

1.3 复杂度

时间复杂度:O(n)O(n)O(n),其中 nnn 为数组的大小。只需要访问 nums 数组一遍,共 nnn 个位置。

空间复杂度:O(1)O(1)O(1),不需要额外的空间开销。

二、动态规划求解

2.1 求解思路——五部曲

  1. 确定dp数组(dp table)以及下标的含义:
    dp[i]表示在下标i处跳跃的覆盖范围。

  2. 确定递推公式
    对于dp[i],它等于dp[i-1]跳一格到达i处后剩余的步数,和nums[i]的最大值。因此得出状态转移方程为:dp[i]=max(dp[i−1]−1,nums[i])dp[i]=max(dp[i-1]-1,nums[i])dp[i]=max(dp[i−1]−1,nums[i])

  3. dp数组如何初始化
    边界条件:dp[0]=nums[0]dp[0]=nums[0]dp[0]=nums[0]

  4. 确定遍历顺序
    在每次循环开始,我们判断dp[i-1]是否等于0,若是,则不可能到达下标i处,因此直接返回false。循环结束后 返回true

  5. 举例推导dp数组

2.2 代码实现

class Solution:def canJump(self, nums: List[int]) -> bool:n = len(nums)dp = [0] * ndp[0] = nums[0]for i in range(1,n):if dp[i-1] == 0: return Falsedp[i] = max(dp[i-1]-1,nums[i])return True

2.3 复杂度

时间复杂度:O(n)O(n)O(n),其中 nnn 为数组的大小。只需要访问 nums 数组一遍,共 nnn 个位置。

空间复杂度:O(n)O(n)O(n)

python 跳跃游戏相关推荐

  1. lintcode: 跳跃游戏 II

    跳跃游戏 II 给出一个非负整数数组,你最初定位在数组的第一个位置. 数组中的每个元素代表你在那个位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 样例 给出数组A =  ...

  2. 我的世界python写游戏_用python写游戏之 Give it up

    <永不言弃 Give It Up>,这是一款极具虐心色彩的音乐题材闯关游戏. 这篇文章就来分析这款游戏原理,并用python写出来一个简易版.废话不多说,直接开始分析. 游戏元素,暂且把主 ...

  3. python文件下载战_在您的Python平台游戏中放一些战利品

    python文件下载战 这是正在进行的有关使用Pygame模块在Python 3中创建视频游戏的系列的一部分. 以前的文章是: 通过构建一个简单的骰子游戏,学习如何用Python编程 使用Pygame ...

  4. 45. 跳跃游戏 II

    ''' Author: 365JHWZGo Description: 45. 跳跃游戏 II Date: 2021-10-20 09:35:48 FilePath: Python\test\demo8 ...

  5. python小游戏小恐龙1

    python小游戏小恐龙1 #coding=utf-8 #coding=gbk import pygame from itertools import cycle from pygame.locals ...

  6. Python小游戏(涂鸦射击)

    Python小游戏(涂鸦射击:以飞机大战为基础) 项目规划 安装Pygame 游戏效果展示 开始游戏项目 设置可能用到的全局变量和导入需要的模块 类声明 类函数中用到的方法 项目规划 首次尝试,使用P ...

  7. 寓教于乐——PyGame游戏编程,Python小游戏制作实战教学

    Python非常受欢迎的一个原因是它的应用领域非常广泛,其中就包括游戏开发.而是用Python进行游戏开发的首选模块就是PyGame. 1. 初识Pygame PyGame是跨平台Python模块,专 ...

  8. python什么框架写游戏好_免root修改器框架,免root框架大全,游戏框架免root:《游戏框架》 用python做游戏用什么框架-南开游戏网...

    <游戏框架> 用python做游戏用什么框架 2020-11-25 17:37:36 广告 游戏作为一种分类框架 一个好的网计作品就必然有一个号的网页,那么我们来分析一下,在网页设计过程中 ...

  9. leetcode-45 跳跃游戏II

    给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [2,3,1,1,4] 输 ...

最新文章

  1. Wide ResNet ResNeXt DenseNet DPNet [9] NASNet [10] SENet [11] Capsules [12
  2. java static修饰方法_浅析Java中static修饰符
  3. mate30pro什么时候可以升级鸿蒙,mate 30pro什么时候能装鸿蒙系统?
  4. h5微信本地调试 vue_Vue 移动端微信内H5调起支付(利用js sdk)
  5. php 留言板项目 ajax,PHP Ajax留言板
  6. Windows中Git无法显示中文
  7. 复购分析实践中,Pandas 遇到了大难题
  8. C#中通过Selenium定位a标签的问题
  9. maven 本地仓库的配置
  10. mysql酒店客房管理系统的设计_《酒店客房管理系统设计》总结
  11. CPU中控制器的功能
  12. word2019如何清除折叠黑色三角形的方法
  13. (转)罗振宇跨年演讲:哪来直接登顶的人生,只有不断迭代的历程
  14. 利用python进行识别相似图片(一)
  15. 【数字化转型的另类视角也许更务实】
  16. 体验ChatGPT后,陷入沉思...
  17. 【树莓派不吃灰】基础篇⑯ 搭建sqlite3数据库环境
  18. 一文搞定子网划分!子网掩码!超详细例题解析!
  19. 《产品管理精华》目录
  20. malloc申请内存空间失败

热门文章

  1. Linux 文件系统类型 文件系统结构 与Windows文件系统的比较
  2. 【Ubuntu】安装 ibus 中文拼音输入法
  3. pytorch——基础
  4. 动态图册用HTML怎么制作,imgplay gif动图制作如何使用?imgplay图文使用教程
  5. Logcat常见用法
  6. 贪心算法(Java)
  7. IOS AutoFill Extension 使用
  8. 教你使用WPS轻松去除水印
  9. Android13源码下载及全编译流程
  10. App.config提示错误“配置系统未能初始化”