某个公司的前端面试题。话说我也是走投无路,其他职位实在不好找,竟然回头去看前端开发。我倒不是不想做前端,只不过觉得有负我这两年的所学啊。哎!!!!
问题:已知a、b两个数组,求两数组成员中最小的差。数组的第一位表示该数组的成员数。
js实现:
时间复杂度mn的算法实现
var A = "5 1 7 5 3 10";
var B = "4 2 9 6 3";
function getMinus(a, b) {
// get array
a = a.split(" "), b = b.split(" ");
// save minus
var minus = 2147483647;
for (i = 1; i < a.length; i++) {
for (j = 1; j < b.length; j++) {
var cMinus = Math.abs(a[i] - b[j]);
minus = cMinus < minus ? cMinus : minus;
}
}
return minus
}
时间复杂度logn的算法实现
var A = "5 1 7 5 3 10";
var B = "4 2 9 6 3";
function getSortArr(a) {
return a.split(" ").slice(1).sort(function(_a, _b) { return _a - _b });
}
function getMinusFrom2Array(a, b) {
a = getSortArr(a), b = getSortArr(b);
let min = Math.abs(a[0] - b[0]); // 初始差
for (let i = 0, j = 0; i < a.length && j < b.length;) {
let minus = a[i] - b[j];
if (minus == 0) { // 最小输出
return 0;
} else {
let cMin = Math.abs(minus);
// console.log("cMin:" + cMin);
min = cMin < min ? cMin : min; // 取小
minus > 0 ? j++ : i++
}
}
return min;
}
console.log("min minus:" + getMinusFrom2Array(A, B));