leetcode-55. 跳跃游戏
跳跃游戏
给你一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true
;否则,返回 false
。
f[i]表示从[0,i]的任意位置能到的最远下标值。难点是想出来这一步
状态转移方程就非常容易写了: f[i]=max(f[i-1],nums[i]+i)
初始化f[0]=nums[0]。当f[i-1]<i时,说明从[0,i-1]到不了i,连i都到不了自然是到不了最后,所以 return false
如果f[i]>=n-1
,则 return true
1 | class Solution { |
时空复杂度均为O(n)。
空间优化
注意到f数组只用到了f[i]和f[i-1],所以可以把f数组替换成变量max_jump,空间复杂度优化为常数级。
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 面试资料!