79 lines
2.1 KiB
Markdown
79 lines
2.1 KiB
Markdown
|
|
|||
|
## 题目地址
|
|||
|
https://leetcode.com/problems/jump-game/description/
|
|||
|
|
|||
|
## 题目描述
|
|||
|
```
|
|||
|
Given an array of non-negative integers, you are initially positioned at the first index of the array.
|
|||
|
|
|||
|
Each element in the array represents your maximum jump length at that position.
|
|||
|
|
|||
|
Determine if you are able to reach the last index.
|
|||
|
|
|||
|
Example 1:
|
|||
|
|
|||
|
Input: [2,3,1,1,4]
|
|||
|
Output: true
|
|||
|
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
|
|||
|
Example 2:
|
|||
|
|
|||
|
Input: [3,2,1,0,4]
|
|||
|
Output: false
|
|||
|
Explanation: You will always arrive at index 3 no matter what. Its maximum
|
|||
|
jump length is 0, which makes it impossible to reach the last index.
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
## 思路
|
|||
|
|
|||
|
这道题目是一道典型的`贪心`类型题目。思路就是用一个变量记录当前能够到达的最大的索引,我们逐个遍历数组中的元素去更新这个索引。变量完成判断这个索引是否大于数组下表即可。
|
|||
|
## 关键点解析
|
|||
|
|
|||
|
- 建模 (记录和更新当前位置能够到达的最大的索引即可)
|
|||
|
|
|||
|
## 代码
|
|||
|
|
|||
|
* 语言支持: Javascript,Python3
|
|||
|
|
|||
|
```js
|
|||
|
/**
|
|||
|
* @param {number[]} nums
|
|||
|
* @return {boolean}
|
|||
|
*/
|
|||
|
var canJump = function(nums) {
|
|||
|
let max = 0; // 能够走到的数组下标
|
|||
|
|
|||
|
for(let i = 0; i < nums.length; i++) {
|
|||
|
if (max < i) return false; // 当前这一步都走不到,后面更走不到了
|
|||
|
max = Math.max(nums[i] + i, max);
|
|||
|
}
|
|||
|
|
|||
|
return max >= nums.length - 1
|
|||
|
};
|
|||
|
|
|||
|
```
|
|||
|
Python3 Code:
|
|||
|
```Python
|
|||
|
class Solution:
|
|||
|
def canJump(self, nums: List[int]) -> bool:
|
|||
|
"""思路同上"""
|
|||
|
_max = 0
|
|||
|
_len = len(nums)
|
|||
|
for i in range(_len-1):
|
|||
|
if _max < i:
|
|||
|
return False
|
|||
|
_max = max(_max, nums[i] + i)
|
|||
|
# 下面这个判断可有可无,但提交的时候数据会好看点
|
|||
|
if _max >= _len - 1:
|
|||
|
return True
|
|||
|
return _max >= _len - 1
|
|||
|
```
|
|||
|
|
|||
|
***复杂度分析***
|
|||
|
- 时间复杂度:$O(N)$
|
|||
|
- 空间复杂度:$O(1)$
|
|||
|
|
|||
|
更多题解可以访问我的LeetCode题解仓库:https://github.com/azl397985856/leetcode 。 目前已经30K star啦。
|
|||
|
|
|||
|
大家也可以关注我的公众号《脑洞前端》获取更多更新鲜的LeetCode题解
|