给定一个整型数数组,要求写一个函数,实现找出该数组中子序列各元素值之和的最大值,要求时间复杂度和空间复杂度最优。
int fun(int a[], int count)
{
int i;
int b = a[0];
int sum = a[0];
for(i = 1; i < count; i++)
{
if(b > 0)
{
b += a[i];
}
else
{
b = a[i];
}
if(b > sum)
{
sum = b;
}
}
return sum;
int fun(int a[], int count)
{
int i;
int b = a[0];
int sum = a[0];
for(i = 1; i < count; i++)
{
if(b > 0)
{
b += a[i];
}
else
{
b = a[i];
}
if(b > sum)
{
sum = b;
}
}
return sum;
}
问题分析,考虑使用动态规划算法,b为之前子序列的和,如果b+a[i] > b, 则最大子序列变为b + a[i], 否则最大子序列变为b=a[i];
程序在vc6上验证通过。