输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间负责度为O(n)。
基本思想:
令:
f(n)
表示以下标n结束的最大子序列和;
num
表示整形数组;
f(n)=
⎧⎩⎨num[i],f(n−1)+num[i]f(n-1)<0||n==0others
int findMaxSum(int* num,int length)
{
int* f=new int[length];
int maxSum=-INT_MAX;
int start=0,end=0,tmp=0;
for(int i=0;i<length;i++)
{
if(i==0||f[i-1]<0)
{
f[i]=num[i];
tmp=i;
}
else
f[i]=f[i-1]+num[i];
if(f[i]>maxSum)
{
maxSum=f[i];
start=tmp;
end=i;
}
}
return maxSum;
}