1. 问题描述
输入一个整形数组,求数组中连续的子数组使其和最大。比如,数组x
应该返回 x[2..6]的和187.
2. 问题解决
我们很自然地能想到穷举的办法,穷举所有的子数组的之和,找出最大值。
穷举法
i, j的for循环表示x[i..j],k的for循环用来计算x[i..j]之和。
maxsofar = 0
for i = [0, n)
for j = [i, n)
sum = 0
for k = [i, j]
sum += x[k]
/* sum is sum of x[i..j] */
maxsofar = max(maxsofar, sum)
有三层循环,穷举法的时间复杂度为\(O(n^3)\)
对穷举法的改进1
我们注意到x[i..j]之和 = x[i..j-1]