mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
docs:跳跃游戏添加视频链接
This commit is contained in:
@ -4,7 +4,6 @@
|
|||||||
</a>
|
</a>
|
||||||
<p align="center"><strong><a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
<p align="center"><strong><a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
||||||
|
|
||||||
|
|
||||||
# 55. 跳跃游戏
|
# 55. 跳跃游戏
|
||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/jump-game/)
|
[力扣题目链接](https://leetcode.cn/problems/jump-game/)
|
||||||
@ -15,20 +14,25 @@
|
|||||||
|
|
||||||
判断你是否能够到达最后一个位置。
|
判断你是否能够到达最后一个位置。
|
||||||
|
|
||||||
示例 1:
|
示例 1:
|
||||||
* 输入: [2,3,1,1,4]
|
|
||||||
* 输出: true
|
|
||||||
* 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
|
|
||||||
|
|
||||||
示例 2:
|
- 输入: [2,3,1,1,4]
|
||||||
* 输入: [3,2,1,0,4]
|
- 输出: true
|
||||||
* 输出: false
|
- 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
|
||||||
* 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
|
|
||||||
|
|
||||||
|
示例 2:
|
||||||
|
|
||||||
|
- 输入: [3,2,1,0,4]
|
||||||
|
- 输出: false
|
||||||
|
- 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
|
||||||
|
|
||||||
|
# 视频讲解
|
||||||
|
|
||||||
|
**《代码随想录》算法视频公开课:[贪心算法,怎么跳跃不重要,关键在覆盖范围 | LeetCode:55.跳跃游戏](https://www.bilibili.com/video/BV1VG4y1X7kB),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
|
||||||
|
|
||||||
## 思路
|
## 思路
|
||||||
|
|
||||||
刚看到本题一开始可能想:当前位置元素如果是3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?
|
刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?
|
||||||
|
|
||||||
其实跳几步无所谓,关键在于可跳的覆盖范围!
|
其实跳几步无所谓,关键在于可跳的覆盖范围!
|
||||||
|
|
||||||
@ -46,14 +50,13 @@
|
|||||||
|
|
||||||
如图:
|
如图:
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
i每次移动只能在cover的范围内移动,每移动一个元素,cover得到该元素数值(新的覆盖范围)的补充,让i继续移动下去。
|
i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。
|
||||||
|
|
||||||
而cover每次只取 max(该元素数值补充后的范围, cover本身范围)。
|
而 cover 每次只取 max(该元素数值补充后的范围, cover 本身范围)。
|
||||||
|
|
||||||
如果cover大于等于了终点下标,直接return true就可以了。
|
如果 cover 大于等于了终点下标,直接 return true 就可以了。
|
||||||
|
|
||||||
C++代码如下:
|
C++代码如下:
|
||||||
|
|
||||||
@ -71,6 +74,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
## 总结
|
## 总结
|
||||||
|
|
||||||
这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。
|
这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。
|
||||||
@ -83,8 +87,8 @@ public:
|
|||||||
|
|
||||||
## 其他语言版本
|
## 其他语言版本
|
||||||
|
|
||||||
|
### Java
|
||||||
|
|
||||||
### Java
|
|
||||||
```Java
|
```Java
|
||||||
class Solution {
|
class Solution {
|
||||||
public boolean canJump(int[] nums) {
|
public boolean canJump(int[] nums) {
|
||||||
@ -106,6 +110,7 @@ class Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
def canJump(self, nums: List[int]) -> bool:
|
def canJump(self, nums: List[int]) -> bool:
|
||||||
@ -156,9 +161,7 @@ func max(a, b int ) int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Javascript
|
||||||
|
|
||||||
### Javascript
|
|
||||||
|
|
||||||
```Javascript
|
```Javascript
|
||||||
var canJump = function(nums) {
|
var canJump = function(nums) {
|
||||||
@ -196,6 +199,7 @@ impl Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### C
|
### C
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||||
|
|
||||||
@ -217,23 +221,23 @@ bool canJump(int* nums, int numsSize){
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### TypeScript
|
### TypeScript
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
function canJump(nums: number[]): boolean {
|
function canJump(nums: number[]): boolean {
|
||||||
let farthestIndex: number = 0;
|
let farthestIndex: number = 0;
|
||||||
let cur: number = 0;
|
let cur: number = 0;
|
||||||
while (cur <= farthestIndex) {
|
while (cur <= farthestIndex) {
|
||||||
farthestIndex = Math.max(farthestIndex, cur + nums[cur]);
|
farthestIndex = Math.max(farthestIndex, cur + nums[cur]);
|
||||||
if (farthestIndex >= nums.length - 1) return true;
|
if (farthestIndex >= nums.length - 1) return true;
|
||||||
cur++;
|
cur++;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Scala
|
### Scala
|
||||||
|
|
||||||
```scala
|
```scala
|
||||||
object Solution {
|
object Solution {
|
||||||
def canJump(nums: Array[Int]): Boolean = {
|
def canJump(nums: Array[Int]): Boolean = {
|
||||||
@ -250,7 +254,6 @@ object Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||||
|
Reference in New Issue
Block a user