LeetCode.55.跳跃游戏

原题链接: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
点赞