Leetcode349.两个数组的交集
题目
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例
知识点
知识点:哈希表
思路
两种方法均为哈希表。
方法一:哈希表——数组
将nums1与数组构造联系,可以使数组hashmap [ nums1[i] ] 全部赋值为1,再对==[ nums2[i] ]== 值为1的它赋值为2,这样就可以实现题意,具体可以参考我上一篇题解,有助于思考,因为是同样的思路。
方法二:哈希表——unordered_set
直接将num1存入一个容器中,再对num2中的元素进行直接比对,从而出结果,注意返回值与函数本身类型对应。
代码
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int>nums3;
nums3.reserve(1001);
int record[1001]={0};
int u=0;
for(int i=0;i<nums1.size();i++)
{
record[nums1[i]]=1;
}
for(int j=0;j<nums2.size();j++)
{
if(record[nums2[j]]==1)
record[nums2[j]]=2;
}
for(int k=0;k<1001;k++)
{
if(record[k]==2)
nums3.push_back(k);
}
return nums3;
}
};
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>record;
unordered_set<int> nums_set(nums1.begin(),nums1.end());
for(int num : nums2)
{
if(nums_set.find(num)!=nums_set.end())
record.insert(num);
}
return vector<int>(record.begin(),record.end());
}
};
方法对比
直接使用set :空间比数组大,速度比数组慢,在数据量大的情况,差距是很明显的。
但是有些情况不方便使用数组,例如nums1和nums2的数据范围很大,使用数组浪费空间。