JavaScript 中陣列中是否存在和為特定值的數對
在本文中,我們將瞭解如何在陣列中找到一對元素,其和等於特定目標數字。因此,我們將使用 JavaScript 來實現該演算法。
理解問題
眼前的問題是在陣列中找到一對數字,其和等於給定的目標值。並且目標值也應該存在於陣列中。或者我們可以說,我們必須識別 (a, b) 對,其中 a + b = c,並且 c 也存在於陣列中。
給定問題的邏輯
為了解決這個問題,我們將使用雜湊集來儲存陣列的元素。因此,我們需要遍歷陣列中的元素,並檢查條件,即當前元素與任何其他元素的差是否出現在雜湊集中。如果條件滿足,則我們找到了和出現在陣列中的數對。
演算法
步驟 1:由於我們必須找出和等於給定目標值的元素對,並且目標值也應該存在於陣列中。因此,為了執行此任務,我們將建立一個函式。在這個函式中,我們將傳遞陣列作為引數 arr。
步驟 2:建立函式後,我們需要初始化一個空的雜湊集來儲存結果元素對陣列。
步驟 3:現在我們有一個函式和一個變數來儲存結果。在此之後,我們將使用迴圈迭代給定陣列中的每個元素。
步驟 4:在這個迴圈中,我們將檢查條件,如果 num 與任何其他元素的差存在於雜湊集中。因此,如果差存在於集合中,則將該對新增到結果變數中。
步驟 5:執行上述步驟後,我們將 num 新增到雜湊集中並返回結果。結果將包含和出現在給定陣列中的元素對。
示例
// Function for finding pairs with the sum function findPairsWithSumExists(arr) { const hashSet = new Set(); const result = []; for (let i = 0; i < arr.length; i++) { const num = arr[i]; for (let j = 0; j < arr.length; j++) { if (j === i) continue; // Skip the same element const diff = num - arr[j]; if (hashSet.has(diff)) { result.push([num, arr[j]]); } } hashSet.add(num); } return result; } const arr = [1, 2, 3, 4, 5]; const pairs = findPairsWithSumExists(arr); console.log(pairs);
輸出
[ [ 2, 1 ], [ 3, 1 ], [ 3, 2 ], [ 4, 1 ], [ 4, 2 ], [ 4, 3 ], [ 5, 1 ], [ 5, 2 ], [ 5, 3 ], [ 5, 4 ] ]
複雜度
查詢和等於給定目標值的數字對的時間複雜度為 O(n^2),其中 n 是給定陣列的大小。造成這種複雜度的原因為我們使用了巢狀迴圈來迭代陣列。並且程式碼的空間複雜度為 O(n),因為我們使用了雜湊集來儲存結果。
結論
正如我們已經生成了根據給定問題查詢元素對的程式碼。透過使用雜湊集儲存陣列的元素,我們可以有效地找到和出現在陣列中的數字對。並且該演算法具有二次時間複雜度和線性空間複雜度。
廣告