(arr [i]-arr [j])的最大值,其中i <j

时间:2019-10-16 14:59:11

标签: algorithm

这是我想出的具有O(n ^ 2)时间复杂度的解决方案

        int x= 0;
        for(int i=0;i<n;i++) {
            for (int j = i+1; j < Dif.length; j++){
               if (x < (Dif[i] - Dif[j])) {
                    x = Dif[i] - Dif[j];
                }
            }

1 个答案:

答案 0 :(得分:6)

让我们仔细看一下表达式

max(arr[i] - arr[j])  for i < j

我们假设我们的j是固定的。然后,表达式简化为

[max(arr[i]) for i < j] - arr[j]

这立即为我们提供了一种算法,在该算法中,我们可以递增地计算子序列的最大值,直到j-1

max = arr[0] //the maximum element of the subarray
maxDiff = -infinity //the maximum difference seen so far
for j from 1 to n-1
    diff = max - arr[j]
    //check if we found a better difference
    if diff > maxDiff
        maxDiff = diff
    //update the maximum element
    if arr[j] > max
        max = arr[j]
return maxDiff

这是线性的元素数量。