Leetcode 最大子序列和

题目描述:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

分析 :

最大子序列的第一个数不能是负数, 否则去掉第一个数的子序列比原最大子序列还大,矛盾。

同理可知最大子序列中前面任意长的子序列之和也不能是负数。

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 0:
            return 
        
        # 分别为当前子列表和, 最大子列表和
        sublist_sum, sublist_maxsum = 0, nums[0] 
        for i in range(len(nums)):
            sublist_sum += nums[i] # 当前元素累加到当前子列表和中

            # 若当前子列表和大于最大子列表和, 更新最大子列表和的值
            if sublist_sum > sublist_maxsum: 
                sublist_maxsum = sublist_sum  

            # 若当前子列表和为负数, 那么当前子列表显然不包含在最大子列表中
            if sublist_sum < 0:    
                sublist_sum = 0
        return sublist_maxsum

 

你可能感兴趣的:(LeetCode)