例题描述
给定两个数组,编写一个函数来计算它们的交集。
示例1:
- 输入:
nums1 = [1,2,2,1], nums2 = [2,2]
- 输出:
[2]
示例 2:
- 输入:
nums1 = [4,9,5], nums2 = [9,4,9,8,4]
- 输出:
[9,4]
解题思路
交集即两集合共有的元素的集合。
所以首先要保证集合的唯一性,所以选择std::map
容器导入元素,进行去重。
然后随意遍历其中一个集合中的元素,每个元素与另一个集合中查找这个元素:
- 如果存在,即为交集元素,插入需要返回的
vector
中。 - 如果不存在,即找到了
map
的end()
位置,表示存在在A
集合中的B
集合中不包含的元素,那这个元素不会处理,即不放入返回的集合。
代码实现
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> ret;
set<int> s1;
for(auto e:nums1){
s1.insert(e);
}
set<int> s2;
for(auto e:nums2){
s2.insert(e);
}
for(auto e:s1){
if(s2.find(e) != s2.end()) //s1和s2都共有此元素
ret.push_back(e);
}
return ret;
}
};
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/