题目描述
输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。
分析
方法简单,但是思路并不好想,记录之。
用sum_max记录已经出现的最大和,因为数组是有正有负的,一个明显的限制条件是:最大和只可能为正数。
cur_max一直对数组中元素求和,当其为负的时候,肯定是加了某一个负数,所以该负数一定不在最大和的子数组中,此时,sum_max已经记录了该负数位置之前的最大和。
那么负数后面的数还有可能有更大的子数组吗?
这时,让cur_max置0,从下一个元素开始继续加和,发现更大的和,则赋值给sum_max
时间O(n),空间O(1)
# data = [2,4,-7,5,2,-1,2,-4,3]
data = [1,-2,3,10,