数组的每个非空子数组的最大值

时间:2015-08-14 08:33:40

标签: algorithm

如何找到时间复杂度小于O(n ^ 2)的每个可能子阵列(阵列的连续部分)的最大值?

我在O(n ^ 2)时间内完成但恐怕太慢了。那么我怎么能在不到O(n ^ 2)的时间内完成它呢?

PS。对不起,我提出了与我想问的问题不同的问题。 (这是我第一次)。

我所做的有点像这样:

for size = 2 to n
    for j = 1 to n - size
        A[j] <- max(A[j], A[j+1])
        increase the frequency of the value v in A[j] 
        in another array every time v occurs as a maximum

1 个答案:

答案 0 :(得分:1)

您可以在线性时间内解决问题。从头开始并将current_sum初始化为0.迭代数组,并为每个元素将其值添加到current_sum。如果current_sum变为非正数,则将其设为0并继续使用下一个元素。否则只需继续下一个元素。最大总和将是current_sum在此过程中达到的最大值。

需要一点思考才能证明这种方法的正确性,但基本思路是将一个带正数的部分附加到子阵列将总是增加总和。