349. 两个数组的交集
力扣题目链接(opens new window)
题意:给定两个数组,编写一个函数来计算它们的交集。
说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。
对于看某个元素是否出现在一个集合中的 ,考虑哈希 法
//unorder_set可以自动帮去重的数据结构,
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>result_set;//存放结果,去重的无序的哈希表。,现在为空
unordered_set<int>num_set (nums1.begin(),nums1.end());//将num1数组转换成unordered_set类型,帮去重
for(int num:nums2){//遍历num2,看num是否在num_set中出现过
if(num_set.find(num)!=num_set.end())//表明出现了,因为迭代器没走到最后,表明找到元素
{
result_set.insert(num);//插入到结果集合
}
}
return vector<int>(result_set.begin(),result_set.end());//返回结果集合的元素
}
};
2,用数组
//数组
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int hash[1001] = {0};//定义一个大于1000的数组,全置为0
unordered_set<int>result;
for(int i=0;i<nums1.size();i++){//将num1在出现的元素在数组hash中做好记录,有就为1,无就为0
hash[nums1[i]]=1;
}
for(int num:nums2){//遍历nums2查hash表
if(hash[num]==1){
result.insert(num);
}
}
return vector<int>(result.begin(),result.end());
}
};
如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。