当前位置: 首页 > news >正文

宁波城乡建设网站辛集seo网站优化公司

宁波城乡建设网站,辛集seo网站优化公司,介绍网络营销,猪八戒网做动漫弹幕网站思路一&#xff1a;回溯&#xff1a;按照选和不选的判断方式&#xff0c;使用回溯来解决这个问题。 class Solution: def rob(self, nums: List[int]) -> int: n len(nums) #数组的长度 def dfs(i): if i<0: #到达边界条件后 return 0 #返回最大金额是0 res max(dfs(i…

 思路一:回溯:按照选和不选的判断方式,使用回溯来解决这个问题。

class Solution:

    def rob(self, nums: List[int]) -> int:

        n = len(nums) #数组的长度

        def dfs(i):

            if i<0: #到达边界条件后

                return 0 #返回最大金额是0

            res = max(dfs(i-1),dfs(i-2)+nums[i]) #如果选,下一次递归的就是i-2,并且要加上nums[i]的值,如果不选,下一次递归i-1。比较选或者不选的最大值并返回。

            return res

        res = dfs(n-1) #传入的是数组的最大下标

        return res

问题:回溯使用递归,时间复杂度是指数级别的,会超时,那如何让时间降下来?

思路二:有两次相同的计算结果,那就把每个位置的计算结果保存下来,可以把时间缩短。

 

class Solution:

    def rob(self, nums: List[int]) -> int:

        n = len(nums)

        cache = [-1]*n #因为每个位置一定不是负数

        def dfs(i):

            if i<0:

                return 0

            if cache[i] != -1: #当前的位置不是-1,那么这个位置被计算过,直接返回计算的结果

                return cache[i] 

            res = max(dfs(i-1),dfs(i-2)+nums[i])

            cache[i] = res #把当前位置的计算结果保存

            return res

        res = dfs(n-1)

        return res

问题:这种方式的空间复杂度就是O(n),如何将空间复杂度降下来:递推

思路三:我们可以确定的知道每个节点是那几个数归的结果,那把递的过程省略,直接归,也就是从下往上计算结果。

 

 循环对数组下标有要求,所以下标从2开始。

class Solution:

    def rob(self, nums: List[int]) -> int:

        n = len(nums)

        f = [0]*(n+2) #归的数组长度是n+2,每个数组的值是0

        for i,x in enumerate(nums): #遍历nums

            f[i+2] = max(f[i+1],f[i]+x) # 等同于res = max(dfs(i-1),dfs(i-2)+nums[i])

        return f[n+1]

改进空间复杂度:

class Solution:

    def rob(self, nums: List[int]) -> int:

        n = len(nums)

        f0 = f1 = 0

        for i,x in enumerate(nums):

            new_f = max(f1,f0+x)

            f0 = f1

            f1 = new_f

        return f1

思路:

class Solution:

    def climbStairs(self, n: int) -> int:

        dp0 = 1

        dp1 = 1

        if n <= 1:

            return 1

        dp = 0

        for i in range(2,n+1):

            dp = dp0 + dp1

            dp0 = dp1

            dp1 = dp

        return dp

 思路:

 

class Solution:

    def minCostClimbingStairs(self, cost: List[int]) -> int:

        n = len(cost)

        dp0 = 0 #第0级台阶的顶部最小花费是0

        dp1 = min(cost[0],cost[1]) #第1级台阶的顶部台阶的最小花费是cost[0]或cost[1]的最小值

        for i in range(2,n):

            dp = min(dp1+cost[i],dp0+cost[i-1])

            dp0 = dp1

            dp1 = dp

        return dp1

http://www.yayakq.cn/news/458508/

相关文章:

  • 绿色配色的企业网站秦皇岛网站制作与网站建设公司
  • 游戏网站建设收费明细安徽淮南网
  • 网站死链怎么处理电子网站建设实验报告
  • 表白网页制作网站企业网站后台模板
  • 免费 网站青岛发现51例阳性
  • wordpress全站cdn ssl三年抗疫国库空虚殆尽
  • 网站建设中申请备案wordpress 音乐 主题
  • 公司注册名称大全seo最新快速排名
  • seo建站技术公众平台安全助手官网
  • 公司做外贸网站小程序商城哪个平台好
  • 出国做博后关注哪些网站阿里云wordpress安装目录
  • php网站开发框架在哪些网站上做推广好
  • 网页设计心得体会大二seo点击工具帮你火21星热情
  • 小说网站开发猪八戒企业信用信息公示系统(全国)官网
  • 携程前端网站开发团队wordpress 当前用户id
  • 广东如何做网站设计怎么弄免费的php空间做网站
  • 网站开发视频教程下载网络营销工具的特点
  • 网站自己怎么做优化免费推广软件有哪些
  • 网站网站做庄是怎样做做网站建设公司哪家好
  • 建设一个完整网站技术路线网站开发文档的示例
  • 兰州做网站的电脑版网站转手机版怎么做
  • asp网站系统如何利用网络平台挣钱
  • wordpress建站比较如何做淘宝客网站推广
  • 临沂网站制作方案在线生成个人网址
  • 佛山高端网站建设pc网页游戏网站
  • 上外国网站用什么dns管理咨询师报考条件2022年
  • 昆山网站建设培训班服装店的营销方法
  • 网站创建公司网站安装系统后没有wordpress
  • 华为公司网站建设方案模板西安手机网站建设公司
  • 个人网站 备案phpcms wap网站搭建