在算法方面需要帮助-查找输出的最大和

时间:2019-09-06 16:58:31

标签: arrays algorithm pseudocode greedy

我目前正在研究算法,对一个家庭作业问题(是的,我知道)感到好奇,因为我一直在寻找矛盾的答案。

在伪代码中,算法为:

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。正确吗?

1 个答案:

答案 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