算法导论4.1.5:线性查找最大子数组问题

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

金沙官网线上 1

示例:

东十八北面的天空.jpg

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

class Solution:
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_value = nums[0]
        current =0
        for i in range(len(nums)):
            if current > 0: current +=nums[i]
            else:           current =  nums[i]
            if max_value < current:max_value = current
        return max_value

原题:使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过得最大子数组。若已知A[1…j]的最大子数组,基于如下性质将解扩展为A[1…j+1]的最大子数组:A[1…j+1]的最大子数组要么是A[1…j]的最大子数组,要么是某个子数组A[i…j+1] (1≤i≤j+1)。在已知A[1…j]的最大子数组的情况下,可以在线性时间内找到形如A[i…j+1]的最大子数组。

本文由金沙官网线上发布于编程,转载请注明出处:算法导论4.1.5:线性查找最大子数组问题

您可能还会对下面的文章感兴趣: