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

题目

在这里插入图片描述

解题思路

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

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

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

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

猜你喜欢

转载自blog.csdn.net/KeEN_Xwh/article/details/107866577