给一个int数组A和数组长度n,请返回最大连续序列的和
比如数组 [1,2,3,-6,1],则返回 6.
其实我们 可以多找几个例子:
[1,3,-1,3,4] --> 10
[-1,-2,-3,-4] --> -1
从中可以发现,最大连续序列的和有正有负,所以在初始化 Max 的值时不能习惯性的赋予0,应置为INT_MIN.之后的思路便是顺序累加,若是当前总和 sum为正数则继续进行下去,sum 为负则表示会越加越小,此时应置 sum为0.在累加的过程中sum值若是大于Max,则将sum值赋予Max。
代码如下:
int gfetmaxSum(vector<int> A,int n)
{
if( A.empty() || n <= 0 || n >3000 )
return 0;
int i = 0;
int sum = 0; //当前和
int Max = INT_MIN; //最大和
while(i < n)
{
sum += A[i];
if(sum > Max)
Max = sum;
if(sum < 0)
sum = 0;
i++;
}
return Max;
}