1、题目
给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
2、解
方法一:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2){
int numsTimes[1001];
for(auto num : nums1){
numsTimes[num] ++;
}
set<int> temp;
for(auto num : nums2){
if(numsTimes[num]){
temp.insert(num);
}
}
nums1.clear();
for(auto t : temp){
nums1.push_back(t);
}
return nums1;
}
方法二:
通过迭代器的性质查找
vector<int> intersectionA(vector<int>& nums1, vector<int>& nums2){
unordered_set<int> nums1Set;
nums1Set.insert(nums1[0]);
for(auto num : nums1){
nums1Set.insert(num);
}
unordered_set<int> resultSet;
for(auto num : nums2){
if(nums1Set.end() != nums1Set.find(num)){
resultSet.insert(num);
}
}
nums1.clear();
std::copy(resultSet.begin(), resultSet.end(), nums1.begin());
return nums1;
}