在 JavaScript 中查詢所有和為目標值的數對


我們在給定的問題陳述中的目標是藉助 Javascript 找到所有可能的和為給定目標值的數對。因此,我們可以藉助 Javascript 的一些內建函式來解決此問題。

理解問題

給定的問題指出,我們給定一個數組和一個目標值,我們的任務是找到所有可能的和為目標值的數對。例如,假設我們有一個數組,例如 [6, 5, 4, 3, 2, 1],目標值為 6,則可能的數對將是 [[2, 4], [1, 5]]。

給定問題的邏輯

我們將首先初始化一個空陣列來儲存滿足條件的數對。之後,我們將使用一個 map 物件來跟蹤輸入陣列中的每個數字。然後,在迴圈的幫助下,我們將遍歷陣列項。在每次迭代中,我們將透過減去目標值來計算當前數字的補數。如果我們找到了補數,則將其儲存在 map 物件中。在將所有數對新增到結果陣列後,我們將更新 map 物件中當前數字的頻率。並返回數對陣列,該陣列將包含所有可能的和等於目標值的數對。

演算法

步驟 1:藉助一個空陣列,我們將儲存和為給定目標值的數對的目標值。

步驟 2:建立一個 map 物件來儲存輸入陣列中每個數字的頻率跟蹤。

步驟 3:遍歷輸入陣列中的數字。

步驟 4:透過從目標值中減去它來計算數字的補數。

步驟 5:如果 map 中存在數字的補數,那麼我們將迭代補數計數並將其新增到數對陣列中。

步驟 6:更新 map 物件中數字的頻率。並將數對陣列返回到控制檯。

示例

// Function to find pairs of the given target from the array
function findPossiblePairs(arr, target) {
   const pairs = [];
   const map = {};
   for (let i = 0; i < arr.length; i++) {
      const complement = target - arr[i];

      if (map.hasOwnProperty(complement)) {
         const compCount = map[complement];

         for (let j = 0; j < compCount; j++) {
            pairs.push([arr[i], complement]);
         }
      }

      if (map.hasOwnProperty(arr[i])) {
         map[arr[i]]++;
      } else {
         map[arr[i]] = 1;
      }
   }

   return pairs;
}
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const sum = 10;

const pairs = findPossiblePairs(nums, sum);
console.log(pairs);

輸出

[ [ 6, 4 ], [ 7, 3 ], [ 8, 2 ], [ 9, 1 ] ]

複雜度

程式碼的執行時間為 O(n),其中 n 是給定輸入陣列的大小。因為我們已經遍歷了陣列一次。並且我們使用了物件 map 來儲存陣列中整數的頻率計數;空間複雜度為 O(n)。

結論

在我們建立的線性時間程式碼中,它識別了所有可能的和為所需值的數對。我們還使用頻率對映確定了每個專案或數字的補數並建立了可能的數對。在不使用巢狀迴圈的情況下,我們以最小的時間和空間複雜度實現了所需的輸出。

更新於: 2023-08-14

1K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.