问题:给定一个整数序列(包括负数),求该序列的所有子序列和的最大值。
例如:{1, -8 , 3 , 5 , -4 , 2 , 6 , -5}的最大子序列和为{3 , 5 , -4 , 2 , 6}的和12。
1.穷举法
我首先考虑的是穷举法,即计算出所有子序列的和,从中找到一个最大的。
代码:
int MaxSubSeqenceSum(const int M[],int length) {
//M存储了一个整数序列,length表示该序列的长度。
int maxsum = 0;
int cursum = 0;//表示当前子序列的和
for (int i = 0; i < length; i++) {
for (int j = i; j < length; j++) {
//这里的双重循环穷举所有的子序列,子序列的下标以i开头j结尾。
cursum = 0;
for (int k = i; k <= j; k++){
//这里的循环计算当前子序列的和。
cursum += M[k];
}
if (cursum > maxsum)
maxsum = cursum;
}
}
return maxsum;
}
这里有3重嵌套的for循环,时间复杂度为O(N^3),显然该算法性能