暴力求解:双重for循环
class Solution { public: vector<int> findNumbersWithSum(vector<int>& nums, int target) { int n= nums.size(); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(nums[i] + nums[j] == target) return vector<int> {nums[i],nums[j]}; } } } };
方法2:用unordered_set<>()
C++ unordered_set定义及初始化详解
unordered_set<T> 容器类型的模板定义在 unordered_set 头文件中。unordered_set<T> 容器提供了和 unordered_map<T> 相似的能力,但 unordered_set<T> 可以用保存的元素作为它们自己的键。T 类型的对象在容器中的位置由它们的哈希值决定,因而需要定义一个 Hash<T> 函数。
这种容器不能存放重复的元素。
unordered_set用法
代码
class Solution { public: vector<int> findNumbersWithSum(vector<int>& nums, int target) { unordered_set<int> hash; int n= nums.size(); for(int i=0;i<n;i++) { if(hash.count(target-nums[i]))//返回target-nums[i]的个数,即判断target-nums[i]是不是存在 return vector<int> {nums[i],target-nums[i]}; //维护hash表 hash.insert(nums[i]);//每次判断完,将数加到hash表里。 } } };