查找数组中元素的最大总和

时间:2012-09-09 13:00:07

标签: arrays algorithm

编写一个程序,通过给定的整数值数组(包含负整数)找到数组中连续元素的最大总和。

示例:

  

2,3,6,-1, 2,-1,6,4 , - 8,8

给出

  

11

我正在寻找一种比O(N ^ 2)更快的解决方案。

3 个答案:

答案 0 :(得分:10)

我认为Kadane's Algorithm就是你想要的

答案 1 :(得分:4)

这实际上是我在大学学习的一本教科书问题(Mark Allen Weiss的数据结构和算法)......这是一个非常漂亮和优雅的解决方案,并在O(N)中得到解决

int MaxSubsequenceSum(int A[])
{
    int sum = 0, maxSum = 0;

    for (int j = 0; j < A.Length; j++)
    {
        sum = sum + A[j];

        if (sum > maxSum)
            maxSum = sum ;
        else if (sum < 0)
            sum = 0;
    }
    return maxSum;
}

答案 2 :(得分:-3)

您可以先按降序对给定数组进行排序,然后通过以下方式对数组的前三个元素求和: sum=arr[0]+arr[1]+arr[2] 通过初始化sum=0和打印总和。