题目描述
给定两个数组,编写一个函数来计算它们的交集。
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
解题思路
这算是一个比较综合的题,有多种思路可以解决此类型的题。(相似题目:350、 两个数组的交集 II)
- 两个
unordered_set
:set
去重 + 哈希表实现O(1)
查找。 - 排序 + 双指针:先对两个数组排序,然后指定两个指针分别指向两个数组的首元素,然后依次向后遍历比较。
- 排序 + 二分:先对一个数组排序,然后对另一个数组中的每个元素,在已排序的数组中进行二分查找。
补充:各种算法模板。
参考代码
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set uset1(nums1.begin(), nums1.end());
unordered_set uset2(nums2.begin(), nums2.end());
vector<int> res;
for(auto num: uset1){ // 其实这里最好选个短的uset遍历
if(uset2.find(num) != uset2.end())
res.push_back(num);
}
return res;
}
};