算法:非暴力算法求兩數組中最小差 的算法 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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章