1. 程式人生 > >一個數組a[0...n-1],求a[i]-a[j]的最大值,其中i>j

一個數組a[0...n-1],求a[i]-a[j]的最大值,其中i>j

其實這道題有O(n)的方法。

第一種方法:

左往右求下標1到 k - 1 的最大值MAX
右往左求 下標k到n -1 的最小值MIN

對於每個k都有一個MAX - MIN的值,最後求這個值的最大值即可。

比如4 5 2 6 3 1

MAX 4 4 2 2 2

MIN 1 3 6 6 6

左上減去右下,最大的值為6 - 2 = 4, 即為結果

第二種方法:

令b[i] = a[i + 1] - a[i],那麼a[i] - a[j] = b[j] + ... b[i - 1],即將問題轉化成求一個數組子序列的最大值。這個過程的演算法是有O(n)的演算法的。