题目
给定两个数组,编写一个函数来计算它们的交集。
说明:
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
示例
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
题目分析
官方题解说用集合是幼稚的方法,然后自己给出了一个调api的方法,所以我在这里用幼稚的方法实现一遍。
需要用到两个集合,先遍历第一个数组,把元素都插入集合中:
set<int> s1;
for (auto temp : nums1){
s1.insert(temp);
}
然后遍历第二个数组,检查第二个数组中的元素是否在集合1中,如果在集合1中,将其插入集合2:
set<int> s2;
for (auto temp : nums2){
if (s1.count(temp)) s2.insert(temp);
}
这一步是为了去重。
最后再遍历集合2,将其元素插入结果数组中:
vector<int> res;
for (auto temp: s2) res.push_back(temp);
C++有更方便的插入方式:
vector<int> res(s2.begin(), s2.end());
题目解答
class Solution {
public:
set<int> s1, s2;
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
for (auto temp : nums1) s1.insert(temp);
for (auto temp : nums2){
if (s1.count(temp)) s2.insert(temp);
}
vector<int> res(s2.begin(), s2.end());
return res;
}
};