zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    专职DBA-MySQL体系结构与基本管理
    JSON
    MIME类型
    文件上传下载
    response常用的方法
    2020.11.27小记
    HTTP请求状态码
    1561. Maximum Number of Coins You Can Get
    1558. Minimum Numbers of Function Calls to Make Target Array
    1557. Minimum Number of Vertices to Reach All Nodes
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13022808.html
Copyright © 2011-2022 走看看