最大连续子数组和算法

求最大连续子数组和问题

sample input:

-1,4,-3,6,-20,4,-2,5

sample output:

7

最容易想到的就是暴力解决方法,穷举所有连续子数组的可能性,进行比较,复杂度O(n2)

代码略

复杂度为O(n)的算法:

  1. 如果arr[0]的值大于0,将max赋值为arr[0],否则赋值为0
  2. 读取下一项,累加到sum,如果sum>0,且如果sum>max,将max更新为sum的值,如果sum<0,将sum赋值为0
  3. 重复(2)直至最后一项,所得max即为所求。

代码如下(python3):

def getMaxSub(arr):
    max = arr[0]
    sum = arr[0]
i = 1
while(i<len(arr)): sum += arr[i] if(sum<=0): sum = 0 elif(sum>max): max = sum i += 1 print('max sum of submatrix is ',max) #for test getMaxSub([-1,4,-3,6,-20,4,-2,5])

输出结果为“max sum of submatrix is  7”

 

posted @ 2018-12-10 14:28  去跑去跳  阅读(720)  评论(0编辑  收藏  举报