兩個陣列的交集 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]

更新於: 2020 年 8 月 25 日

578 次檢視

開啟您的 事業

完成課程即可獲得認證

開始學習
廣告