我目前正在研究算法,对一个家庭作业问题(是的,我知道)感到好奇,因为我一直在寻找矛盾的答案。
在伪代码中,算法为:
Algorithm-1(A:array[1..n] of integer) sum,max:integer
sum = 0
max = 0
for i = 1 to n
sum = 0
for j = i to n
sum = sum + A[j]
if sum > max then
max = sum
return max
给定数组[-1,2,-3,4,-5,6,7,-8,9,-10]我发现上述函数返回的最大值应为4该算法的解释,但在网上我找到的唯一两个答案是14和10。
我对这种算法的理解是,它采用基本数组,找到其总和,然后从 next 索引开始采用相同的数组,然后找到该总和,返回的值是这些金额中最高的。
基本上,如果给定[1,2,-3,4,5]数组,它将以这种方式查看:
[1,2,-3,4,5]的总和= 9
[2,-3,4,5]的总和= 8
[-3,4,5]的总和= 6
[4,5]的总和= 9
[5]的总和= 5
返回的最终最大值是9,因为9> 8> 6> 5
基于这种理解,我认为我的数组的值在[6,7,-8,9,-10]子数组中为4。正确吗?
答案 0 :(得分:2)
不是,我想您不了解子数组的概念,子数组基本上是数组中任何连续元素的集合。让我们举个例子。
对于
[-1,-2,-3,4,-5,6,7,-8,9,-10]
对于每个大小为N的数组,都有N *(N + 1)/ 2个子数组。在这种特殊情况下,答案是子数组[6,7,-8,9],该子数组将总和返回为14。
请查看以下链接以更好地理解:
Kadane Algorithm for maximum sum subarray