描述:
给出n个整数(亦正亦负)组成的序列a[1],a[2],a[3],…,a[n],求该序列中a[i]+a[i+1]+…+a[j]的子段和的最大值。当最大子段和为负数时,规定此数列的最大子段和为0.
算法和思路:
依据上面的描述,所求的点i最大路径和c[i]应该为:Max{a[i], c[i - 1] + a[i]}
源代码:
#include <stdio.h>
#define MAX 10
int maxSubSum(int P[])
...{
int i;
int maxsum = 0;
int c = 0;
for(i = 0; i < MAX; i++)
...{
if(c > 0)
c += P[i];
else
c = P[i];
if(c > maxsum)
maxsum = c;
}
return maxsum;
}


int main()
...{
int A[MAX];
int i;
int sum;
printf("Please input a array: ");
for(i = 0; i < MAX; i++)
scanf("%d",&A[i]);
sum = maxSubSum(A);
printf(" The Max subsum is: %d",sum);
return 0;
}这个算法的时间复杂度是O(n),相对于分治算法的O(nlogn)效率要高.
1323

被折叠的 条评论
为什么被折叠?



