假设你有一个不同整数的数组: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