JavaScript 中兩個陣列的子集


我們上面問題陳述的目標是使用 Javascript 功能並確定給定的陣列是否彼此的子集。因此,使用迴圈我們可以解決這個問題。

理解問題

問題描述指定我們必須識別給定陣列是否另一個數組的子集。或者我們必須檢查第二個陣列中的所有項是否都存在於第一個陣列中。例如,假設我們有一個像 ['a', 'b', 'c', 'd', 'e'] 這樣的陣列,以及一個第二個陣列 ['b', 'd', 'e']。因此,當我們比較這兩個陣列以檢查子集時,結果將為真。因為第二個陣列的所有項都存在於第一個陣列中。

給定問題的邏輯

為了解決問題,我們將使用 Set 建構函式從第一個陣列建立一個集合,並啟用 has 方法來檢查專案是否存在。接下來,我們將遍歷第二個陣列並驗證每個專案是否存在於集合中。如果找不到該專案,我們將返回 false。如果我們已成功遍歷了第二個陣列中的所有專案,那麼我們將得出結論,它是的第一個陣列的子集並返回 true。

演算法

步驟 1:使用函式檢查給定陣列是否另一個數組的子集。然後在函式內部,我們將傳遞兩個陣列作為輸入。

步驟 2:接下來,從輸入陣列建立一個集合。

步驟 3:使用迴圈遍歷陣列的陣列項。

步驟 4:驗證條件,如果第一個陣列中的當前專案是否存在於第二個陣列中。如果條件滿足,則返回 true,否則返回 false。

示例

// Function to check for subset of arrays
function isArraySubset(arr1, arr2) {
   const set = new Set(arr1);

   for (let i = 0; i < arr2.length; i++) {
      if (!set.has(arr2[i])) {
         return false;
      }
   }

   return true;
}

const arr1 = [10, 24, 38, 14, 85];
const arr2 = [24, 14, 85];
const arr3 = [16, 67, 78];

console.log(isArraySubset(arr1, arr2));
console.log(isArraySubset(arr3, arr1));

輸出

true
false

複雜度

此演算法的時間複雜度為 O(n),其中 n 是第二個陣列的大小。由於我們使用了“has”方法,其平均時間複雜度為 O(1)。因此,我們在集合中執行了 n 次查詢,這就是複雜度導致線性時間的原因。

結論

我們程式中給定的程式碼有效地確定了一個數組是否使用 Set 是第二個陣列的子集。該程式碼的時間複雜度為 O(n),對於大多數實際場景來說都是一種有效的解決方案。

更新於: 2023-08-14

284 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告