假設你有一個不同整數的數組:A = [a1,a2,a3,a4,a5 ...] 我需要找到數組的兩個元素,比如A [ i]和A [j],使得i小於j並且A [j] -A [i]是最小的。在數組中尋找條件極小差異的算法
下面是一個有效的解決方案嗎?
- 陣列首先排序,並保持每個元素的原始索引(即,軌道:所述元件的原件中的索引(未排序)陣列
- 經過排序後的數組,並計算任何之間的差異該驗證的初始條件,即更大的元素的原始索引小於更小的元素的原始索引更大兩個連續的元件。
- 答案將是所有這些不同的最小值。
這裏是這對於前者如何工作?充足的:
A=[0,-5,10,1] (in this case the result should be 1 coming from the difference between A[3] and A[0])
sort A : newA=[-5,0,1,10]
since OriginalIndex(-5)>OriginalIndex(0), do not compute the difference
since OriginalIndex(1)>OriginalIndex(0),we compute the difference =1
since OriginalIndex(10)>OriginalIndex(1), we compute the difference =9
The result is the minimal difference, which is 1
你的第一句話是不完整的。 – eliot 2013-03-25 01:47:08
謝謝艾略特我現在修好了。任何線索,如果這種方法可能工作? – user2205925 2013-03-25 02:04:24
如果對輸入進行排序:[ - 1,0,2,10],則取前兩個元素:-1和0.在前面,未排序的數組-1是AFTER 0,所以初始條件「i is less比j和A [j] -A [i]最小「未被驗證,因爲我比j大。然後你移動到0和2,差別是2.這是我們有效的區別,因爲元素2是未排序數組中的元素1之後的元素。然後你移動到2和10,差異是8.找到的最小差異是2,所以這是答案。你怎麼看 ? – user2205925 2013-03-25 02:41:10