某個公司的前端面試題。話說我也是走投無路,其他職位實在不好找,竟然回頭去看前端開發。我倒不是不想做前端,只不過覺得有負我這兩年的所學啊。哎!!!!
問題:已知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));