问题:
给定N个整数的序列{A1,A2,…,AN,},求序列的最大子列和。
算法1
三重循环,时间复杂度O()。
int MaxSubseqSum1(int a[], int n)
{
int ThisSum, MaxSum = 0;
int i, j, k; // i是左端位置,j是右端位置
//* 三重循环
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
ThisSum = 0;
for (k = i; k <= j; k++)
{
ThisSum += a[k];
if (ThisSum > MaxSum)
MaxSum = ThisSum;
}
}
}
return MaxSum;
}
算法2
在算法1的基础上进行了改进,对于相同的i,不同的j,只要在j-1次循环的基础上累加一项即可
时间复杂度O()。
一个优秀的程序员看见时间复杂度为O()的算法,下意识会想办法将其优化成时间复杂度为O(nlogn)的算法。
int MaxSubseqSum2(i