#题目描述:
![01fd74d0cedf4679f6b375f0a29e6ef4.png](https://i-blog.csdnimg.cn/blog_migrate/eb2ebd8a6c5707c5c0f8d16f2c995882.jpeg)
该题仅要求忽略次数求出两个数组之间的交集
#思路1:
使用set求第一个数组的set集合
对于第二个数组,每个元素在set集合中查找
若有,则将该元素添加到结果向量,set集合剔除该元素
若无,则走下个元素
vector<int>intersection(vector<int>&nums1, vector<int>&nums2)
{
vector<int>res;
set<int>set1;
for(int i = 0; i<nums1.size(); i++)
{
set1.insert(nums1[i]);
}
for(int i = 0; i<nums2.size(); i++)
{
if(set1.find(nums2[i]) != set1.end())
{
res.push_back(nums2[i]);
set1.erase(nums2[i]);
}
}
return res;
}
#思路2:
思路同上,仅是结果向量也使用set
若nums2中元素在set1中找到,也将其丢进结果的set中,最终再转回向量形式
vector<int>intersection(vector<int>&nums1, vector<int>&nums2)
{
set<int>set1(nums1.begin(), nums1.end()), res;
for(auto num : nums2)
{
if(set1.find(num) != set1.end())
res.insert(num)
}
return vector<int>(res.begin(), res.end());
}
#思路3:
双指针法
先对数组进行排序,在使用两个指针在双数组的最起始位置
元素小的数组指针往后移动
若两个指针所指的元素相等,查看结果向量,若结果向量为空或者与最后元素不等,则将钙元素加入到结果向量中
vector<int> intersection(vector<int>&nums1, vector<int>&nums2)
{
sort(nums1.begin(), nums2.end());
sort(nums1.begin(), nums2.end());
vector<int>res;
int i = 0, j = 0;
while(i < nums1.size() && j<nums2.size())
{
if(nums1[i] > nums2[j])
j++;
else if (nums1[i] < nums2[j])
i++;
else
{
if(res.empyt() || res.back() != nums1[i])II
res.push_back(nums1[i])
i++;
j++;
}
}
return res;
}
#题目2
#题目描述
![3f605f29e576341b3e09ab1f10e533df.png](https://i-blog.csdnimg.cn/blog_migrate/efc6a8c480cc668b7649d4b903e8b348.jpeg)
即该题需要考虑进元素出现的次数
#思路1:
排序后使用双指针,若果相等则添加进结果向量
如果不等,则较小元素指针往前一步
#实现
vector<int> intersection(vector<int> &nums1, vector<int>&nums2)
{
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int i = 0, j = 0;
vector<int>res;
while(i<nums1.size()&&j<nums2.size())
{
if(nums1[i] == nums2[j])
{
res.push_back(nums1[i]);
i++;
j++;
}
else if (nums1[i] < nums2[j])
i++;
else
j++;
}
return res;
}
#思路2:
哈希表
即遍历一个第一个数组,构造哈希表
遍历第二个数组,若元素在哈希表中,则加入结果向量,哈希表元素减1
#实现
class Solution{
public:
vector<int> intersect(vector<int>&nums1, vector<int>&nums2)
{
unordered_map<int, int> table;
vector<int>res;
for(auto a: nums1)
{
table[a] += 1;
}
for(auto a: nums2)
{
if(tabel[a] > 0)
{
res.push_back(a);
table[a]--;
}
}
return res;
}
}