①哈希法思路
1.set作为哈希结构
本题数据不确定,最大数组长度可以是1000个索引,容易造成浪费,所以不用数组。
set容器具有去重功能
2.整体思路
交集的结果一定是set类型的。(排序后双指针去重也行,不过实现起来麻烦)
交集一定去重
②代码实现(初代版本,性能差)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
unordered_set<int>result;
for(auto &n1:nums1){
for(auto &n2:nums2){
if(n1==n2)
result.insert(n1);
}
}
return {result.begin(),result.end()};
}
};
③代码优化
性能差是因为nums1,nums2中出现了重复数据,重复运行,做了很多无用功。所以对初始nums1或者nums2进行去重再处理数据。可以很大提高性能
Ⅰ:只为nums1去重
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
unordered_set<int>result;
unordered_set<int>Compare(nums1.begin(),nums1.end());
for(const auto &n:nums2){
if(Compare.find(n)!=Compare.end()){
result.insert(n);
}
}
return {result.begin(),result.end()};
}
};
Ⅱ:为nums1、nums2去重
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
unordered_set<int>result;
unordered_set<int>Compare1(nums1.begin(),nums1.end());
unordered_set<int>Compare2(nums2.begin(),nums2.end());
for(const auto &n:Compare2){
if(Compare1.find(n)!=Compare1.end()){
result.insert(n);
}
}
return {result.begin(),result.end()};
}
};