在 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)。
结论
在我们创建的线性时间代码中,它识别了所有可能的和为所需值的数对。我们还使用频率映射确定了每个项目或数字的补数并创建了可能的数对。在不使用嵌套循环的情况下,我们以最小的时间和空间复杂度实现了所需的输出。