编写一个程序,通过给定的整数值数组(包含负整数)找到数组中连续元素的最大总和。
示例:
2,3,6,-1, 2,-1,6,4 , - 8,8
给出
11
我正在寻找一种比O(N ^ 2)更快的解决方案。
答案 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
和打印总和。