首页 > 其他分享 >跳跃游戏精细化

跳跃游戏精细化

时间:2024-04-20 23:44:35浏览次数:14  
标签:精细化 游戏 nums distance max 位置 到达 数组 跳跃

跳跃游戏

​ 给定一个数组,每个元素代表跳跃的距离,判断是否能从起点出发,跳到数组的末尾。

​ 例如:给定一数组[3,7,8,1,5],从起点出发,可以跳跃3步,跳到位置3,然后跳1步,跳到位置4,跳4步到达末尾

思路分析

  • 定义一个变量,用来初始化当前能到达最远位置
  • 遍历数组,获取当前位置索引及值,这里使用到enumerate函数,用来实现能够同时获取到当前位置及值。
  • 若当前位置超出了能够到达的最远位置,则无法继续跳跃
  • 使用 max数更新 最远距离,确保它总是表示当前能到达的最远位置。
  • 遍历完成后,检查 max_distance 是否至少为数组长度减一,即是否能到达最后一个位置

enumerate简述

​ Python内置的一个函数,它用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。enumerate返回的是一个枚举对象,它包含元组,每个元组包含两个元素,一个是索引值,一个是原始数据值。

举例:

for index, value in enumerate(['a', 'b', 'c']):  
    print(f"Index: {index}, Value: {value}")

输出结果:

Index: 0, Value: a  
Index: 1, Value: b  
Index: 2, Value: c

贪心算法简述

​ 贪心算法是在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。是从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快地求得更好的解。并且希望通过所做的局部最优选择来导致最终的全局最优解时,这样的算法就被称为贪心算法

​ 在canJump函数中,贪心策略体现在每一步都更新max_distance为当前位置能够到达的最远距离。这意味着在每一步,算法都在尽可能地扩大能够到达的范围。

代码实现

def Jumping_Game(nums):
    max_distance = 0  # 记录当前能够到达的最远位置
    for i, jump in enumerate(nums):  # 遍历数组,获取当前位置的索引和跳跃长度
        if i > max_distance:  # 如果当前位置超出最远能够到达的位置,则无法继续跳跃
            return False
        if i + jump >= len(nums) - 1:  # 如果能够到达或超过最后一个位置,则返回True
            return True
        max_distance = max(max_distance, i + jump)  # 更新最远能够到达的位置

    return False  # 遍历完数组后仍未到达最后一个位置,返回False
if __name__ == '__main__':
    list_nums = [3, 3, 1, 1, 4]
    print(Jumping_Game(list_nums))  
    print('-' * 31)

    list_nums2 = [3, 2, 1, 0, 4]
    print(Jumping_Game(list_nums2)) 

测试用例详述

测试用例一:list_nums = [3, 3, 1, 1, 4]

  • 从位置0开始,数值是3,意味着可以跳到位置0、1、2、3。

  • 一旦到达位置 1,发现从这个位置也可以跳跃的最大步数是 3,这意味着可以直接跳到位置 4(因为 1 + 3 >= 4)。在这种情况下,我们不需要遍历位置 2 或位置 3,已经找到了一条从位置 0 到位置 4 的路径。)。

    图例(表格方式,红色为跳跃数):
    image

测试用例二:list_nums2 = [3, 2, 1, 0, 4]

  • 同样从位置0开始,数值是3,我们可以跳到位置0、1、2、3。

    更新max_distance为3。

  • 在位置1,数值是2,我们可以跳到位置1、2、3。此时max_distance仍然是3。

  • 在位置2,数值是1,我们只能跳到位置2或3。此时max_distance仍然是3。

  • 在位置3,数值是0,这意味着我们无法从这里跳到更远的位置。此时,i(当前位置)已经大于max_distance(最远能够到达的位置),所以函数返回False

图例(表格方式,红色为跳跃数):

总结

​ 关键在于每一步都尽可能地更新max_distance,从而确保我们不会错过任何可能到达数组的末尾路径。

​ 时间复杂度:O(n),代码遍历了数组nums一次,没有嵌套循环或其他会增加时间复杂度的操作。因此,时间复杂度是O(n),其中n是数组nums的长度。

​ 空间复杂度:O(1),代码中只使用了几个变量(如max_distance和i,jump)来追踪当前能够到达的最远位置,当前下标,当前位置的值。这些变量不随数组nums的大小变化而增加,因此空间复杂度是O(1)。

标签:精细化,游戏,nums,distance,max,位置,到达,数组,跳跃
From: https://www.cnblogs.com/yzwxd/p/18148425

相关文章

  • 32天【代码随想录算法训练营34期】第八章 贪心算法 part02 (● 122.买卖股票的最佳时
    122.买卖股票的最佳时机IIclassSolution:defmaxProfit(self,prices:List[int])->int:result=0foriinrange(len(prices)-1):ifprices[i+1]-prices[i]>0:result+=prices[i+1]-prices[i]return......
  • 游戏服务器开发的基本体系与服务器端开发的一些建议
    刚开始时以为做游戏服务器和做web差不多,但是经过一段时间之后,才发现代码太多,太乱了,一看代码都想重构,都是踩着坑往前走。这里我把一些游戏开发方面的东西整理一下,希望能对那些想做游戏服务器开发的朋友有所帮助近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过......
  • 某游戏忍者全局过异常分析
    虽然这篇文章可能会涉及到某些人的利益,但我还是写了首先,我们先将手机与ce进行桥接(具体的教程b站有)然后我们先找到a内存的过异常(原理就是将当前怪物包改0,当前市面上广为流传的过异常都是这个原理)我们在ce中添加他的地址查看访问他的操作码(触发他)然后我们看到访问了他的......
  • 7-02.创建游戏数据存储结构框架
    安装Newtonsoft-jsoncom.unity.nuget.newtonsoft-json创建GameSaveData创建ISaveable创建SaveLoadManager修改ISaveable创建DataGUID修改ISaveable给Player绑定GUID运行,然后停止,然后再运行,这时GUID就一直存在了修改Player脚本给所有Ma......
  • 通过构建游戏学习-Python(四)
    通过构建游戏学习Python(四)原文:zh.annas-archive.org/md5/8d68d722c94aedcc91006ddf3f78c65a译者:飞龙协议:CCBY-NC-SA4.0第十一章:使用Pygame超越Turtle-使用Pygame制作贪吃蛇游戏UIPython游戏开发在某种程度上与pygame模块相关。到目前为止,我们已经学习了关于Py......
  • 通过构建游戏学习-Python(五)
    通过构建游戏学习Python(五)原文:zh.annas-archive.org/md5/8d68d722c94aedcc91006ddf3f78c65a译者:飞龙协议:CCBY-NC-SA4.0第十四章:了解PyOpenGL几何形状和图形在游戏开发中起着至关重要的作用。当涉及到先进的图形技术的开发时,我们往往忽视它们的重要性。然而,许多流行的游......
  • 通过构建游戏学习-Python(一)
    通过构建游戏学习Python(一)原文:zh.annas-archive.org/md5/8d68d722c94aedcc91006ddf3f78c65a译者:飞龙协议:CCBY-NC-SA4.0前言2018年9月,我正在教一些学生使用Python进行游戏编程和自动化。然后,我意识到是时候创建一本书,不仅提供关于使用Python进行游戏编程丰富内容......
  • 2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。 游戏
    2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值。勇者们有一次机会可以击破一个节点泡泡,但需要满足以下规则:被击破的节点泡泡最多只能有一个子节点泡泡。如果被击破的节点......
  • 4-02. 实现跟随游戏时间触发切换场景光效
    修改Settings修改TimeManager修改EventHandler修改TimeManager修改LightManager修改LightControl修改LightManager修改LightControl修改TimeManager给门灯添加LightControl添加LightPattern并把它拖动给Light2D下面那个灯也要拷贝相同的L......
  • P3345 [ZJOI2015] 幻想乡战略游戏
    题意:傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打仗了。在打仗之前,幽香现在面临一个非常基本的管理问题需要解决。整个地图是一......