最大子序列求和问题及联机算法
最大子序列求和:
问题描述:输入一个整数序列,求出其中连续子序列和的最大值。
算法一:
遍历所有子序列求和,找出其中的最大值
/*
* 计算并返回所最大子序列的和:穷举遍历 时间复杂度为O(N^3)
*/
public int maxSubSum1(int[] a){
int maxSum = 0; //用来存储最大子序列的和
for (int i = 0; i < a.length; i++){ //i标记子序列的头
for (int j = i; j < a.length; j++){ //j标记子序列的尾
int thisSum = 0; //用来存储当前头尾计算的求和结果
for (int k = i; k <= j; k++){ //将子序列的值依次加入求和结果
thisSum += a[k];
}
if(thisSum > maxSum) //存储两者的最大值
maxSum = thisSum;
}
}
return maxSum;
}
算法二:
在算法一的基础上优化,只要两个 for 循环就可以得到所有的子序列
/*
* 计算并返回所最大子序列的和:穷举优化 时间复杂度为O(N^2)
*/
public int