题解 | #和为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函数用的巧妙,找到了之后其实无所谓,不用管都可以。
