• 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]
  • 相关阅读:
    [译]K-D-B-tree(草稿,第一次翻译)
    [LeetCode]Letter Combinations of a Phone Number
    [LeetCode]Multiply Strings
    [LeetCode]Populating Next Right Pointers in Each Node
    [LeetCode]Sum Root to Leaf Numbers
    [LeetCode]String to Integer (atoi)
    [LeetCode]Path Sum II
    [LeetCode]Minimum Depth of Binary Tree
    线上死锁问题排查
    Redis(四):独立功能的实现
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13022808.html
Copyright © 2020-2023  润新知