- 题目描述:
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 - 解题思路:
c++的stl里面提供了三种集合,set(有序不重复),multiset(有序可重复),unordered_set(无序不可重复)。本题不用考虑顺序问题,说明可以就使用unordered_set来进行求解。先把nums数组的元素放入集合1,然后再遍历num2,分别再集合1中找2的元素,如果存在说明是交集中的元素,但是这里也要注意交集中的元素也不能重复,所以保存结果集也不能使用vector而是要使用集合。 - 解题代码:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;
unordered_set<int> nums_set(nums1.begin(),nums1.end());
for(int num : nums2){
if(nums_set.find(num) != nums_set.end()){
result_set.insert(num);
}
}
return vector<int>(result_set.begin(),result_set.end());
}
};
- tips(本题重点):
stl::set的底层原理和方法,
SET的容器源码分析
stl::set的初始化和相互赋值的方法.
set中的迭代器完全使用的是红黑树的迭代器,并且iterator使用的是const_iterator,意味着不能修改。