美文网首页动态规划
Maximum Sum Subarray 子序列最大和

Maximum Sum Subarray 子序列最大和

作者: 穿越那片海 | 来源:发表于2017-03-07 13:30 被阅读33次

    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 子序列最大和

        本文链接:https://www.haomeiwen.com/subject/ofrmgttx.html