假设你有一个不同整数的数组: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
答案 0 :(得分:0)
这是一个解决方案,它在时间上是O(n ^ 2),但在空间中是O(1)。在伪代码中:
for i = 0; i < array.length; i++
for j = i + 1; j < array.length; j++
if a[j] - a[i] < min
min = a[j] - a[i]
return min
答案 1 :(得分:0)
如果您想要找到的是正的最小差异,那么基本上,您的问题是:
Find two closest elements in an array.
O(nlogn)解决方案很简单:
因此整体运行时间为O(nlogn)
您不必关心索引。因为你的内容是abs(A[i]-A[j])=abs(A[j]-A[i])
,所以无关紧要i>j
或j>i