目录

最大连续子列和

O(n)解法

//如果是负数则返回零
int MaxSubsequence(int a[], int n)
{
    int maxSum = 0, thisSum = 0;
    for (int i = 0; i < n; i++)
    {
        thisSum += a[i];
        if (thisSum > maxSum)
            maxSum = thisSum;
        if (thisSum < 0)
            thisSum = 0;
    }

    return maxSum;
}
//返回最大的子序列,如果是负数,则返回最大的负数
int MaxSubsequence(int a[], int n)
{
    int maxSum = a[0], thisSum = a[0];
    for (int i = 1; i < n; i++)
    {
        if (thisSum <= 0)
            thisSum = a[i];
        else
            thisSum += a[i];

        if (thisSum > maxSum)
            maxSum = thisSum;
    }

    return maxSum;
}

其他解法参考以下链接

参考链接 参考链接