最大连续子数组和算法
求最大连续子数组和问题
sample input:
-1,4,-3,6,-20,4,-2,5
sample output:
7
最容易想到的就是暴力解决方法,穷举所有连续子数组的可能性,进行比较,复杂度O(n2)
代码略
复杂度为O(n)的算法:
- 如果arr[0]的值大于0,将max赋值为arr[0],否则赋值为0
- 读取下一项,累加到sum,如果sum>0,且如果sum>max,将max更新为sum的值,如果sum<0,将sum赋值为0
- 重复(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”