题目描述
输入一个数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。
如果有多对数字的和等于s,输出任意一对即可。
你可以认为每组输入中都至少含有一组满足条件的输出。
样例
输入:[1,2,3,4] , sum=7
输出:[3,4]
算法1
(暴力枚举)
时间复杂度
$O(n^2)$
C++ 代码
class Solution {
public:
vector<int> findNumbersWithSum(vector<int>& nums, int target) {
for(int i = 0; i < nums.size(); i ++)
for(int j = 0; j < i; j ++)
if(nums[i] + nums[j] == target)
return vector<int> {nums[j], nums[i]};
}
};
算法2
(哈希)
时间复杂度
$O(n)$
C++ 代码
class Solution {
public:
vector<int> findNumbersWithSum(vector<int>& nums, int target)
{
unordered_set<int> se;
for(int i = 0; i < nums.size(); i ++)
{
if(se.count(target - nums[i])) return vector<int> {target - nums[i], nums[i]};
se.insert(nums[i]);
}
return vector<int>();
}
};