Algorithm 阵列中每个非空子阵列的最大值

Algorithm 阵列中每个非空子阵列的最大值,algorithm,Algorithm,如何找到时间复杂度小于O(n^2)的每个可能子阵列(阵列的连续部分)的最大值 我在O(n^2)时间内完成了,但恐怕太慢了。那么我怎样才能在不到O(n^2)的时间内完成呢 对不起,我提出的问题与我想问的不同。(这是我第一次) 我所做的是这样的: 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 i

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

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

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

我所做的是这样的:

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
对于大小=2到n
对于j=1到n-尺寸

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


证明这种方法的正确性需要一点思考,但基本思想是,在子阵列中添加一部分正和总是会增加总和。

你能告诉我们,你已经尝试了什么吗?对不起,我把问题框错了。我并没有要求最大子数组和,而是每个非空子数组的最大值。请你帮忙好吗@IVAYLOSTRANDJEV您正在查找n^2个答案-如果每个子阵列都有最大值。因此,在复杂度小于n^2的情况下不可能这样做。我需要知道每个元素作为子数组的最大值出现的次数,这在时间复杂度小于n^2的情况下是可行的。也许我的问题不清楚。无论如何,我已经弄明白了,不过,非常感谢。