兩個陣列的交集 JavaScript
我們有兩個數字陣列,我們需要編寫一個函式(比如 intersection())來計算它們的交集,並返回一個包含按任意順序相交元素的陣列。結果中的每個元素都應該按其在兩個陣列中出現的次數出現。
例如,如果,
Input: arr1 = [1,2,3,1], arr2 = [1,3,1] Output: [1,3,1]
方法
如果陣列已排序,我們可以使用雙指標方法,其中兩個指標最初都指向各個陣列的開頭 0,並且我們可以繼續增加相應的指標,這將是 O(m+n) 複雜度的時間,其中 m 和 n 是陣列的大小。
但是,由於我們有未排序的陣列,所以對陣列進行排序然後使用此方法沒有任何邏輯,我們將檢查第一個值與第二個值的每一對,並構造一個交集陣列。這會花費我們 O(n^2) 的時間。
完成此操作的程式碼如下 −
示例
const arr1 = [1, 2, 43, 5, 3, 7, 7,8, 4, 2]; const arr2 = [1, 1, 6, 6, 2, 78, 7, 2, 3, 7, 23, 5, 3]; const intersection = (arr1, arr2) => { const res = []; const { length: len1 } = arr1; const { length: len2 } = arr2; const smaller = (len1 < len2 ? arr1 : arr2).slice(); const bigger = (len1 >= len2 ? arr1 : arr2).slice(); for(let i = 0; i < smaller.length; i++){ if(bigger.indexOf(smaller[i]) !== -1){ res.push(smaller[i]); bigger.splice(bigger.indexOf(smaller[i]), 1, undefined); } }; return res; }; console.log(intersection(arr1 ,arr2));
輸出
控制檯中的輸出將是 −
[1, 2, 5, 3, 7, 7, 2]
廣告