从有负有正的数组中找出总和最大的连续序列

给一个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;
}

猜你喜欢

转载自blog.csdn.net/qiting00/article/details/81147616