题解 | #和为S的两个数字#
和为S的两个数字
https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int> ans; unordered_map<int, int> num_mp; for(int i = 0; i <array.size();i++){ int complement = sum - array[i]; if(num_mp.find(complement) != num_mp.end()){ ans.push_back(complement); ans.push_back(array[i]); return ans; } num_mp[array[i]] = i; } return ans; } }; class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int>ans; for(int i = 0 ; i < array.size(); i++){ for(int j = i ; j < array.size() ;j++){ if(array[i] + array[j] == sum){ ans.push_back(array[i]); ans.push_back(array[j]); return ans; break; } } } return ans; } };
首先是用哈希表来做这个,挺巧妙的,另外就是用数组排序来做,但是是有限制的,数字大小会超过int型,所以最后通过不了。
但是哈希表是没有这个问题的。哈希表巧妙就巧妙在这个complement,这个find函数用的巧妙,找到了之后其实无所谓,不用管都可以。