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),因为我们使用了哈希集来存储结果。

结论

正如我们已经生成了根据给定问题查找元素对的代码。通过使用哈希集存储数组的元素,我们可以有效地找到和出现在数组中的数字对。并且该算法具有二次时间复杂度和线性空间复杂度。

更新于: 2023-08-16

202 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告