Maximum Sum Subarray 子序列最大和

Easy, Dynamic Programming

给定序列(至少包含一个数),寻找连续子序列,其拥有最大和。

Example, 给定 [-2,1,-3,4,-1,2,1,-5,4],
最大子序列[4,-1,2,1] 最大和 6.

这是一个dynamic programming 解决的优化问题。求A[:]的子序列最大和可以转为求A[:i]的子序列最大和,i为子序列的最大值,不断更行子问题的解来求得最终解。也可以说是使用了divide and conqure 的思想。

如果已知A[:i-1]的子序列最大和sum(i-1),那A[:i]的解就是取sum(i-1)i位置的局部最大值的较大值。那么如何求i位置的局部最大值,同样也是一个DP问题,对i-1位置的局部最大值进行更新。

此题对于没有DP思想的coder来说其实是很难的一道题,但是LeetCode将其分类为easy。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        localmax, globalmax = 0, None
        for num in nums:
            globalmax = max(globalmax, localmax+num)
            localmax = max(0, localmax+num)
        return globalmax

你可能感兴趣的:(Maximum Sum Subarray 子序列最大和)