《剑指offer》【连续子数组的最大和】(python版)

题目描述
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O ( n )

思路:
本题可以用简单的动态规划完成,用 f ( i ) 记录以a[i]为结尾的子数组的最大和,如果前面i-1的子数组的最大和为负值,那么全部抛弃, f ( i ) 就等于当前数组值。同时用res维护得到的数组最大和的最大值,有以下关系:
f ( 0 ) = a [ 0 ]
f ( 1 ) = m a x ( f ( 0 ) + a [ 1 ] , a [ 1 ] )

f ( i ) = m a x ( f ( i 1 ) + a [ i 1 ] , a [ i ] )

class Solution:
    def FindGreatestSumOfSubArray(self, array):
        # write code here
        maxsum = array[0]
        res = maxsum
        for i in range(1, len(array)):
            maxsum = max(maxsum + array[i], array[i])
            res = max(maxsum, res)
        return res

猜你喜欢

转载自blog.csdn.net/qq_20141867/article/details/80995158