这是我想出的具有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];
}
}
答案 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
这是线性的元素数量。