题解 | 和为S的两个数字
和为S的两个数字
https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b
哈希和双指针
哈希:与存的值没啥关系,在第10行if(set.find(tmp) == set.end())对键进行查找,用unordered_set就可以了
双指针:和太大就减右边指针,和太小就加左边指针
#include <unordered_map> #include <vector> class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int> res; unordered_set<int> set; for (int i = 0; i < array.size(); ++i) { int tmp = sum - array[i]; if(set.find(tmp) == set.end()) { set.insert(array[i]); } else { res.push_back(tmp); res.push_back(array[i]); return res; } } return res; // vector<int> res; // int left = 0; // int right = array.size() - 1; // int current_sum = array[left] + array[right]; // while (left < right) { // if(current_sum < sum) // { // left++; // current_sum = array[left] + array[right]; // } // else if (current_sum > sum) // { // right--; // current_sum = array[left] + array[right]; // } // else // { // res.push_back(array[left]); // res.push_back(array[right]); // break; // } // } // return res; } };