LeetCode最大子序和(Python)——动态规划

题目

在这里插入图片描述

解题思路

时间复杂度为O(N2)的暴力解法就不说了,那首当其冲肯定是动态规划了,先上代码:
在这里插入图片描述
首先,怎么判断一道题能不能用动态规划做?

第一,看大问题能不能拆成几个小问题,并且大问题的最优解可以由小问题的最优解推出。在这道题里,比如现在要求前三项[ -2 , 1 , -3 ]的最大子序和(即大问题),我们已知前两项[ -2 , 1 ]的最大子序和为1(即小问题),只需要看 -3加上这个1大还是不加上大,就知道了。因此这道题满足这个条件,这个条件又叫最优子结构。

第二,如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响。可能有点绕,还是拿刚才的例子,我求前三项的最大子序和,我只想知道前两项的最大子序和,至于是如何算出来的前两项最大子序和,对我以及以后的状态都没有影响了,并且假设我之后要求前四项的最大子序和,那我只想知道前三项的最大子序和,不想知道前三项是怎么算的。这个条件又叫无后效性,即未来与过去无关。也正是基于这个条件,所以在实现中,不需要额外的空间,直接在原来的数组nums上修改即可。

最后的执行结果为:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值