1. 程式人生 > 其它 >FCC面試攻略-演算法:找到對等分差

FCC面試攻略-演算法:找到對等分差

技術標籤:FCC演算法javascript演算法基礎javascript演算法面試

知識提要:對稱差 (Symmetric Difference),數學上,兩個集合的對稱差分是隻屬於其中一個集合,而不屬於另一個集合的元素組成的集合,例如:集合let A = [ 1, 2, 3]和let B = [ 2, 3, 4]的對稱差分為A △ B = C = [ 1, 4]。 集合論中的這個運算相當於布林邏輯中的異或運算。

建立一個函式 sym,輸入兩個或兩個以上的陣列作為引數,然後返回值為對稱差分的陣列

思路:設定兩個陣列 (例如:let A = [1, 2, 3],let B = [2, 3, 4])作為引數傳入,返回對稱差分陣列(A △ B = C = [1, 4]),且陣列中沒有重複項。

function sym(...args) {

    //子陣列去重
    const newArgs = args.map(item => Array.from(new Set(item)))

    //每次處理兩個陣列(reduce()),即當前子陣列(cur)和上一輪處理結果(prev)
    return newArgs.reduce((prev, cur) => {

        //將當前子陣列與上一輪處理結果數組合並(concat())、排序(sort()) 並過濾(filter())
        return prev.concat(cur).sort((
a, b) => a - b).filter((item, index, arr) => { //提取合併後無重複的值 return arr[index] !== arr[index + 1] && arr.indexOf(item) === index ? item : '' }) }) } sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5]) //return [1, 4, 5]