找到数组中数字对之间最小差异的最快算法是什么?

时间:2011-09-24 20:26:18

标签: arrays algorithm

  

可能重复:
  Is it possible to find two numbers whose difference is minimum in O(n) time

例如,在[4, 2, 7, 11, 8]中,算法应返回abs(7-8) = 1

蛮力方式为O(n 2 ),排序将给出O(nlogn)。有更有效的方法吗?

由于

2 个答案:

答案 0 :(得分:3)

我认为排序和比较将是您最好的选择。类似的东西:

function minDiff( arr ) {
    var min,
        temp,
        initDiff = false,
        arr = arr.sort( function(a, b){return a-b} ),
        last = arr.length - 1,
        i;

    for ( i = 0; i < last; i++ ) {

        if ( !initDiff ) {            
            min = arr[i + 1] - arr[i];
            initDiff = true;
        } else {            
            temp = arr[i + 1] - arr[i];

            if ( temp < min ) {            
                min = temp;            
            }            
        }
    }

    return min; 
}

var myArr = [ 1, 8, 5, 96, 20, 47 ],
    min = minDiff( myArr );

console.log( min ); // 3

答案 1 :(得分:2)

这里有一个类似的问题 - Is it possible to find two numbers whose difference is minimum in O(n) time。它似乎是O(nlogn)。

此页面也可能会提供useful背景信息。