配列 A = [a1, a2, a3, a4, a5...] があり、配列の 2 つの要素、たとえば A[i] と A[j] を見つけて、i が j より小さく、A [j]-A[i] は最小で正です。
ランタイムは O(nlog(n)) でなければなりません。
このコードは仕事をしますか:
最初に配列をソートし、各要素の元のインデックス (つまり、元の (ソートされていない) 配列内の要素のインデックス) を追跡します。
並べ替えられた配列を調べて、2 つの連続する要素間の差を計算します。これにより、大きい要素の元のインデックスが小さい要素の元のインデックスよりも大きいという初期条件が検証されます。
答えは、これらすべての差の最小値になります。
これが例でどのように機能するかを次に示します。
A = [0, -5, 10, 1]
A[3]
この場合、結果はとの差から 1 になるはずA[0]
です。
並べ替え A : newA=[-5,0,1,10]
OriginalIndex(-5)>OriginalIndex(0) であるため、差を計算しない
OriginalIndex(1)>OriginalIndex(0) であるため、差 = 1 を計算します。
OriginalIndex(10)>OriginalIndex(1) であるため、差 = 9 を計算します。
結果は、最小の差である 1 です。