设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 1:
输入:nums = [5,6,5], target = 11
输出:[[5,6]]
示例 2:
输入:nums = [5,6,5,6], target = 11
输出:[[5,6],[5,6]]
提示:
nums.length <= 100000
-105^55 <= nums[i], target <= 105^55
遍历nums,用哈希表记录下来遍历到的元素的出现次数,后边再出现时,就有了一对数对:
cpp
class Solution {
public:
vector<vector<int>> pairSums(vector<int>& nums, int target) {
vector<vector<int>> ans;
unordered_map<int, int> cnt;
for (int i : nums) {
if (cnt[target - i] == 0) {
++cnt[i];
} else {
ans.push_back({i, target - i});
--cnt[target - i];
}
}
return ans;
}
};
如果nums的长度为n,nums中元素的种类数为m,则此算法时间复杂度为O(n),空间复杂度为O(m)。