//思路:设前面k项之和为sum(最开始时k为0),将k+1开始的项逐项加到sum中,注意在这个过程中如果出现了负数则需要对当前的sum值保存一次了,因为负数会拖后腿的;如果sum的值已经小于0,则可以认为前面的项之和在拖后面的子数组的后腿,在这种情况下可以撇开前面的子数组 将sum值赋值为0,重新寻找子数组。
#include<stdio.h>
int MaxSum;
void FindMax(int*res,int len);
int main()
{
int n,group[1000];
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&group[i]);
}
MaxSum=0;
FindMax(group,n);
printf("%d\n",MaxSum);
return 0;
}
void FindMax(int*res,int len)
{
int sum=0;
for (int i=0;i<len;i++)
{
if (res[i]<0)
{
if (sum>MaxSum)
{
MaxSum=sum;
}
}
if (sum+res[i]<=0)
{
sum=0;
}
else
{
sum+=res[i];
}
}
}