原题链接:https://leetcode-cn.com/problems/jump-game/comments/。
考虑使用贪心算法:
对于一个例子:
[2,3,1,1,4]
首先将其翻转,得到:
[4,1,1,3,2]。
将问题转换为从尾部往前跳跃,是否可以跳到开头。可见问题具有最有子结构,我们可以将数组拆分变成多个子问题。
而且该问题具有贪心选择性质,即可以通过局部最优构建全局最优。
显然,从索引1可以跳跃的到开头,现在我们只需要判断索引1后边的数组能否往前跳跃到索引1.如果可以说明是可以跳跃成功的。
下面是python代码:
class Solution(object):
def canJump(self, nums):
""" :type nums: List[int] :rtype: bool """
nums = nums[::-1] # 翻转列表
res = 0 # 该变量用来说明前res位已经可以跳跃成功了
for i in range(1,len(nums)): #从索引1开始遍历判断是否可以跳跃成功,如果可以更新res的值。
if nums[i] >= i -res:
res = i
return res == len(nums) -1