需要快速查找某一元素是否出现过,第一反应就要想到哈希表。在这题里,map、set和vector这三种容器可以任意组合进行使用,或者单独用一种。方法很多,想到哪个用哪个就可以了。
解法之一:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> unmap;
for (int i = 0; i < nums1.size(); ++i) {
unmap[nums1[i]] = 1;
}
unordered_set<int> unset;
for (int i = 0; i < nums2.size(); ++i) {
if (unmap[nums2[i]] == 1) unset.insert(nums2[i]);
}
return vector<int>(unset.begin(), unset.end());
}
};
纯使用set容器的解法:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> unset1;
for (int i = 0; i < nums1.size(); ++i) {
unset1.insert(nums1[i]);
}
unordered_set<int> unset2;
for (int i = 0; i < nums2.size(); ++i) {
if (unset1.find(nums2[i]) != unset1.end()) unset2.insert(nums2[i]);
}
return vector<int>(unset2.begin(), unset2.end());
}
};