2
  • 输入:实数数组 a[1..n];
  • 输出:两个不同数组元素之间的最小绝对值差。

我想要一个同样的蛮力算法。

任何人有任何想法?

4

2 回答 2

4

如果元素已排序,那么您可能只需要按顺序比较每对项目: [1, 3, 6, 7, 28] -> 7-6 给出最小距离

为了强行使用它,我想您可以从每个值中减去每个值(n * n-1)并跟踪哪个对最小。您需要确保不要从自身中减去相同的元素,但具有相同值的元素应该允许作为对。

于 2012-04-20T17:36:54.647 回答
3

如果你想暴力破解它,只需遍历每一对元素:

min = infinity

for i=1 to n-1
    for j = i+1 to n
        if abs(a[i]-a[j]) < min
            min = abs(a[i]-a[j])

这需要O(n^2)时间。您可以O(n log n)通过首先对列表进行排序来获得时间:

sort(a)
min = infinity

for i = 1 to n-1
    if abs(a[i+1]-a[i]) < min
        min = abs(a[i+1]-a[i])
于 2012-04-20T18:50:15.213 回答