mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
docs:跳跃游戏二添加视频链接
This commit is contained in:
@ -4,10 +4,9 @@
|
||||
</a>
|
||||
<p align="center"><strong><a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
|
||||
|
||||
> 相对于[贪心算法:跳跃游戏](https://mp.weixin.qq.com/s/606_N9j8ACKCODoCbV1lSA)难了不少,做好心里准备!
|
||||
|
||||
> 相对于[贪心算法:跳跃游戏](https://mp.weixin.qq.com/s/606_N9j8ACKCODoCbV1lSA)难了不少,做好心里准备!
|
||||
|
||||
# 45.跳跃游戏II
|
||||
# 45.跳跃游戏 II
|
||||
|
||||
[力扣题目链接](https://leetcode.cn/problems/jump-game-ii/)
|
||||
|
||||
@ -18,13 +17,17 @@
|
||||
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
|
||||
|
||||
示例:
|
||||
* 输入: [2,3,1,1,4]
|
||||
* 输出: 2
|
||||
* 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
|
||||
|
||||
- 输入: [2,3,1,1,4]
|
||||
- 输出: 2
|
||||
- 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
|
||||
|
||||
说明:
|
||||
假设你总是可以到达数组的最后一个位置。
|
||||
|
||||
# 视频讲解
|
||||
|
||||
**《代码随想录》算法视频公开课:[贪心算法,最少跳几步还得看覆盖范围 | LeetCode: 45.跳跃游戏 II](https://www.bilibili.com/video/BV1Y24y1r7XZ),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
|
||||
|
||||
## 思路
|
||||
|
||||
@ -46,7 +49,6 @@
|
||||
|
||||
如图:
|
||||
|
||||
|
||||

|
||||
|
||||
**图中覆盖范围的意义在于,只要红色的区域,最多两步一定可以到!(不用管具体怎么跳,反正一定可以跳到)**
|
||||
@ -57,8 +59,8 @@
|
||||
|
||||
这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时
|
||||
|
||||
* 如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
|
||||
* 如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了。
|
||||
- 如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
|
||||
- 如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了。
|
||||
|
||||
C++代码如下:(详细注释)
|
||||
|
||||
@ -92,14 +94,14 @@ public:
|
||||
|
||||
**针对于方法一的特殊情况,可以统一处理**,即:移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不考虑是不是终点的情况。
|
||||
|
||||
想要达到这样的效果,只要让移动下标,最大只能移动到nums.size - 2的地方就可以了。
|
||||
想要达到这样的效果,只要让移动下标,最大只能移动到 nums.size - 2 的地方就可以了。
|
||||
|
||||
因为当移动下标指向nums.size - 2时:
|
||||
因为当移动下标指向 nums.size - 2 时:
|
||||
|
||||
* 如果移动下标等于当前覆盖最大距离下标, 需要再走一步(即ans++),因为最后一步一定是可以到的终点。(题目假设总是可以到达数组的最后一个位置),如图:
|
||||

|
||||
- 如果移动下标等于当前覆盖最大距离下标, 需要再走一步(即 ans++),因为最后一步一定是可以到的终点。(题目假设总是可以到达数组的最后一个位置),如图:
|
||||

|
||||
|
||||
* 如果移动下标不等于当前覆盖最大距离下标,说明当前覆盖最远距离就可以直接达到终点了,不需要再走一步。如图:
|
||||
- 如果移动下标不等于当前覆盖最大距离下标,说明当前覆盖最远距离就可以直接达到终点了,不需要再走一步。如图:
|
||||
|
||||

|
||||
|
||||
@ -127,7 +129,7 @@ public:
|
||||
|
||||
可以看出版本二的代码相对于版本一简化了不少!
|
||||
|
||||
**其精髓在于控制移动下标i只移动到nums.size() - 2的位置**,所以移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不用考虑别的了。
|
||||
**其精髓在于控制移动下标 i 只移动到 nums.size() - 2 的位置**,所以移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不用考虑别的了。
|
||||
|
||||
## 总结
|
||||
|
||||
@ -137,11 +139,10 @@ public:
|
||||
|
||||
理解本题的关键在于:**以最小的步数增加最大的覆盖范围,直到覆盖范围覆盖了终点**,这个范围内最小步数一定可以跳到,不用管具体是怎么跳的,不纠结于一步究竟跳一个单位还是两个单位。
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
||||
### Java
|
||||
|
||||
```Java
|
||||
// 版本一
|
||||
class Solution {
|
||||
@ -230,6 +231,7 @@ class Solution:
|
||||
step += 1
|
||||
return step
|
||||
```
|
||||
|
||||
```python
|
||||
# 动态规划做法
|
||||
class Solution:
|
||||
@ -244,7 +246,6 @@ class Solution:
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Go
|
||||
|
||||
```go
|
||||
@ -331,21 +332,21 @@ var jump = function(nums) {
|
||||
|
||||
```typescript
|
||||
function jump(nums: number[]): number {
|
||||
const length: number = nums.length;
|
||||
let curFarthestIndex: number = 0,
|
||||
nextFarthestIndex: number = 0;
|
||||
let curIndex: number = 0;
|
||||
let stepNum: number = 0;
|
||||
while (curIndex < length - 1) {
|
||||
nextFarthestIndex = Math.max(nextFarthestIndex, curIndex + nums[curIndex]);
|
||||
if (curIndex === curFarthestIndex) {
|
||||
curFarthestIndex = nextFarthestIndex;
|
||||
stepNum++;
|
||||
}
|
||||
curIndex++;
|
||||
const length: number = nums.length;
|
||||
let curFarthestIndex: number = 0,
|
||||
nextFarthestIndex: number = 0;
|
||||
let curIndex: number = 0;
|
||||
let stepNum: number = 0;
|
||||
while (curIndex < length - 1) {
|
||||
nextFarthestIndex = Math.max(nextFarthestIndex, curIndex + nums[curIndex]);
|
||||
if (curIndex === curFarthestIndex) {
|
||||
curFarthestIndex = nextFarthestIndex;
|
||||
stepNum++;
|
||||
}
|
||||
return stepNum;
|
||||
};
|
||||
curIndex++;
|
||||
}
|
||||
return stepNum;
|
||||
}
|
||||
```
|
||||
|
||||
### Scala
|
||||
@ -425,7 +426,6 @@ impl Solution {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
<p align="center">
|
||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||
|
Reference in New Issue
Block a user