在 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 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 是给定输入数组的大小。因为我们对数组进行了一次迭代。并且我们使用对象映射来存储数组中整数的频率计数;空间复杂度为 O(n)。
结论
在线性时间内,我们创建的代码识别出所有可能的总和为所需值的对。我们还使用频率图确定了每个项目或数字的补码并创建了可能的对。无需使用嵌套循环,我们就以最小的时间和空间复杂度实现了所需的输出。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

