可能重复:
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)。有更有效的方法吗?
由于
答案 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背景信息。