算法:非暴力算法求两数组中最小差 的算法 js实现

某个公司的前端面试题。话说我也是走投无路,其他职位实在不好找,竟然回头去看前端开发。我倒不是不想做前端,只不过觉得有负我这两年的所学啊。哎!!!!

问题:已知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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章