Maximum subarray sum(求最大的子数组求和)

例如

maxSequence([-2, 1, -3, 4, -1, 2, 1, -5, 4])
# should be 6: [4, -1, 2, 1]

按照一般思想,代码如下

def maxSequence(arr):
    max=0
    for i in range(len(arr)):
        for n in range(i+1,len(arr)+1):
            s=sum(arr[i:n])
            print arr[i:n]
            if (s>max):
                max=s
    return max

但是有更好的方法,一次循环嵌套就可以达到目的

def maxSequence(arr):
    max,curr=0,0
    for x in arr:
        curr+=x
        if curr<0:curr=0
        if curr>max:max=curr
    return max

你可能感兴趣的:(算法)