可能是重复问题:
是否有可能在O(n)时间内找到差值最小的两个数字
例如,在[4,2,7,11,8]
中,该算法应返回abs(7-8) = 1
。
暴力法将是O(n 2),排序将给出O(nlogn)。是否有更有效的方法?
谢谢
可能是重复问题:
是否有可能在O(n)时间内找到差值最小的两个数字
例如,在[4,2,7,11,8]
中,该算法应返回abs(7-8) = 1
。
暴力法将是O(n 2),排序将给出O(nlogn)。是否有更有效的方法?
谢谢
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
这里有一个类似的问题 - 是否可能以O(n)时间找到差最小的两个数。看起来是O(nlogn)。
这个页面也许会提供有用的背景信息,请参考。