【题目练习】跳跃游戏

题目:

解题:

运行结果:

解题思路:

一、读题

1、非负整数数组:里面数字 ≥ 0,可以是 0。0 的意思:站在这里一步都跳不动,卡死了。

2、初始位置:下标 0,也就是数组第一个元素那里。

3、numsi 的含义:站在下标 i 的时候,最多往前跳 nums i 步。

重点!!是【最多跳这么多】,不是必须跳这么多。举个例子:nums i=3,代表你可以跳 1 步、2 步、或者 3 步,随便选,但是不能跳 4 步。

4、目标:能不能抵达最后一个下标,不是要跳出数组!比如数组长度是 5,下标是 0,1,2,3,4,目标就是下标 4,只要能摸到下标 4 就成功。

看示例 1:nums = 2,3,1,1,4 下标:0 1 2 3 4 值: 2 3 1 1 4

nums 0=2:站 0 号位置,最多跳 2 步 → 能跳到下标 1,下标 2

nums 1=3:站 1 号位置,最多跳 3 步 → 1+3=4,刚好是终点下标,所以成功,true

二、【回溯 】

那我是不是要把所有可能跳的路线全部试一遍?比如 nums=2,3,1,1,4

从 0 出发,可以跳到 1 或者跳到 2

分支 1:0→1,从 1 又可以跳到 2、3、4,看到 4,成功

分支 2:0→2,从 2 可以跳到 3,从 3 跳到 4,也成功

但是看到提示:nums 长度最多可以到 10⁴,也就是一万个元素。

所以我们换一个角度:到当前为止,我最远能覆盖到哪个下标?这就是贪心思路的起点。

定义一个变量:maxReach

含义:在遍历到现在,所有我们能到达的位置里面,最远能够跳到的下标。

核心规则:

1、只要一个下标 i ≤ maxReach → 下标 i 这个位置是我们可以抵达的;

2、如果 i > maxReach → i 这个位置我们根本到不了,后面所有位置都不用看了。

3、站在可以抵达的 i 点上,这个点能帮我们拓展新的最远边界:

新候选最远 = i + nums i 我们拿这个候选,和原来的 maxReach 比,谁大,谁就是新的 maxReach。

4、只要 maxReach ≥ 终点下标,直接成功。

贪心本质:每次走能走的地方,不断往外推最远边界,边界碰到终点就赢,边界追不上当前 i 就输。

相关推荐
技术人生00119 小时前
DirectX修复工具下载安装教程-Windows系统游戏dll修复工具下载安装修复教程
windows·游戏
郝学胜-神的一滴20 小时前
游戏设计:原型与开发 18:Unity入门的第一课
人工智能·程序人生·游戏·ui·unity·游戏引擎
赤生云电竞21 小时前
云游戏边缘节点部署:机房选址与网络拓扑优化实践——接入延迟、VXLAN与GPU虚拟化选型
数据库·游戏
呆呆敲代码的小Y21 小时前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
好想像大佬一样能够ak所有1 天前
LeetCode.55跳跃游戏_python
游戏
2601_957875201 天前
华立科技荣获环球品牌与合作(大中华区)年度“最佳街机游戏合作伙伴”
大数据·科技·游戏
Solange__1 天前
AI世界模型、3D场景生成和游戏引擎怎么选?按5类任务比较交互、物理与导出
开发语言·人工智能·游戏·平面·3d·自然语言处理·游戏引擎
Solange__1 天前
物流园区怎么用AI生成3D调度预演?从道路底图、车辆转弯到网页评审
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计
呆呆敲代码的小Y1 天前
【实战精选面试题】Unity精选面试题详细解答,按模块整理汇总
人工智能·游戏·unity·游戏引擎