题目描述:
给定一个非负整数数组 nums
,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
示例 1:
1 | 输入:nums = [2,3,1,1,4] |
示例 2:
1 | 输入:nums = [3,2,1,0,4] |
提示:
- $1 <= nums.length <= 3 * 10^4$
- $0 <= nums[i] <= 10^5$
链接:
https://leetcode-cn.com/problems/jump-game
题目分析
这道题目可以使用贪心的思想。对于某个位置 y 是否可以到达,需要满足两个条件:前面的某个位置 x 可以到达,x 可以跳跃到 y,也即有 x + nums[x] >= y
。那我们可以遍历数组,贪心地获取当前可以到达的最远位置,直到遍历到所有的可到达位置,若可以到达的最远位置没有超过数组的最后一个下标,则数组的最后一个下标不可达。
1 | class Solution { |
时间复杂度:$O(n)$,其中 $n$ 是数组的大小。我们最多只需要遍历一遍数组。
空间复杂度:$O(1)$。我们只需要常数个变量的空间。