算法思想:
一、没看答案
- 用一个哈希表uomap存储其中一个数组的值,然后遍历另一个数组并在uomap中查找;
- 如找到了并且res中没有该值,则push_back到res中,否则继续循环。
C++
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> uomap;
vector<int> res;
for(auto v : nums1){
uomap[v];
}
for(auto v : nums2){
if(uomap.find(v) != uomap.end() && find(res.begin(), res.end(), v) == res.end()){
res.push_back(v);
}
}
return res;
}
};
复杂度分析:
- 时间复杂度:O(m+n)。
- 空间复杂度:O(m)。
二、集合去重
- 可以利用unordered_set的集合去重性质解题。
C++
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> set_res;
unordered_set<int> num_set(nums1.begin(), nums1.end());
for(auto s : nums2){
if(num_set.find(s) != num_set.end()){
set_res.insert(s);
}
}
return vector<int>(set_res.begin(), set_res.end());
}
};
复杂度分析:
- 时间复杂度:O(m+n)。
- 空间复杂度:O(m)。