题目描述
输入一个数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。
如果有多对数字的和等于 s,输出任意一对即可。
你可以认为每组输入中都至少含有一组满足条件的输出。
样例
输入:[1,2,3,4] , sum=7
输出:[3,4]
算法
(哈希表) $O(n)$
枚举数组中的每个数,用哈希表存储之前枚举过的数,再把当前数 $x$ 插入到哈希表中前,先判断 $target - x$ 这个数是否在哈希表中出现过,如果有则答案就是 $[x, target - x]$,否则继续枚举,直到找到答案为止
时间复杂度
最坏情况下遍历完整个数组,时间复杂度为 $O(n)$,使用了哈希表,额外空间复杂度为 $O(n)$
参考文献
C++ 代码
class Solution {
public:
vector<int> findNumbersWithSum(vector<int>& nums, int target) {
unordered_set<int> set;
for (auto x : nums)
{
if (set.count(target - x)) return vector<int>{target - x, x};
set.insert(x);
}
return vector<int>();
}
};