题目描述
设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 1:
输入: nums = [5,6,5], target = 11
输出: [[5,6]]
示例 2:
输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]
来源:LeetCode
思路
一次遍历,用一个 map 记录遍历到的数字及个数,然后每个数字,检查 target 和它的差是否在 map 中,有就取用组成了一个数对。
解法
/**
* @param {number[]} nums
* @param {number} target
* @return {number[][]}
*/
const pairSums = (nums, target) => {
const map = {};
const result = [];
nums.forEach(num => {
const difference = target - num;
if (map[difference]) {
result.push([difference, num]);
map[difference]--;
} else {
map[num] = (map[num] || 0) + 1;
}
});
return result;
};