116. 跳跃游戏(存在型动态规划)

116. 跳跃游戏

中文English

给出一个非负整数数组,你最初定位在数组的第一个位置。   

数组中的每个元素代表你在那个位置可以跳跃的最大长度。    

判断你是否能到达数组的最后一个位置。

样例

样例 1

输入 : [2,3,1,1,4]
输出 : true

样例 2

输入 : [3,2,1,0,4]
输出 : false

挑战

这个问题有两个方法,一个是贪心和 动态规划

贪心方法时间复杂度为O(N)

动态规划方法的时间复杂度为为O(n^2)

我们手动设置小型数据集,使大家可以通过测试的两种方式。这仅仅是为了让大家学会如何使用动态规划的方式解决此问题。如果您用动态规划的方式完成它,你可以尝试贪心法,以使其再次通过一次。

注意事项

数组A的长度不超过5000,每个元素的大小不超过5000

 
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param A: A list of integers
    @return: A boolean
    """
    def canJump(self, A):
        # write your code here
        # write your code here
        l = len(A)

        dp = [False]*l
        dp[0] = True

        #循环每一个位置,外层j循环,内层循环,只要前面的每一个位置均为True,同时需要判断前面是否存在大于当前节点的i + A[i] >= j(说明之前就已经存在可以跳过当前节点)
        for j in range(1,l):
            #判断前面是否存在可以跳到当前位置j
            for i in range(j):
                if (i + A[i]) >= j and dp[i] == True:
                    dp[j] = True
                    break
        
        return dp[l - 1]

 

posted @ 2020-06-01 00:45  风不再来  阅读(237)  评论(0编辑  收藏  举报