int arrayNum[] = {-2,1,-4,6,-5, 10,-1, 4,-1,2,-5,10,-7,-1,-1,-50};
int GetMaxSum(int* pNum, int n)
{
int SecondMax = pNum[0];
int Max = pNum[0];
int beginIndex = 0;
int endIndex = 0;
int i = 0;
for (i=1; i<n; i++)
{
if (pNum[i] >=0)
{
//若当前的连续序列和大于0,
if (SecondMax >= 0)
{
SecondMax += pNum[i];
//当前的连续序列和大于最大值,则重设最大值。
if (SecondMax > Max)
{
Max = SecondMax;
endIndex = i;
}
}
//若连续序列和小于0,则当前值比前序列和还大。则重新设置新的序列。
else if (Max < pNum[i])
{
Max = pNum[i];
SecondMax = Max;
beginIndex = i;
endIndex = i;
}
}
else
{
SecondMax += pNum[i];
}
}
printf("最大的连续和序列为:%d", pNum[beginIndex]);
for (int i=beginIndex + 1; i<=endIndex; i++)
{
printf(",%d", pNum[i]);
}
printf("/n");
return Max;
}
输出:
最大的连续和序列为:6,-5, 10,-1, 4,-1,2,-5,10