题目描述
原题链接:349. 两个数组的交集
一、使用set实现
Set的特点
当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
unordered_set<int> record(nums1.begin(), nums1.end()); // 将nums1中元素去重的存放到record中
for(int num : nums2) { // 从nums2中获取元素
if(record.count(num)){ // 若在nums1中出现过
res.push_back(num); // 将相交元素加入到res中
record.erase(num); // 从record中删除,避免重复记录
}
}
return res;
}
};
二、使用map实现
Map的特点
Set相当于是Value为1的Hash表
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
unordered_map<int, int> record;
for(int i = 0; i < nums1.size(); i++) { // 将nums1中元素作为record的key,进行Hash映射
record[nums1[i]] = 1;
}
for(int i = 0; i < nums2.size(); i++) { // 寻找橡胶集合加入
if(record[nums2[i]]-- == 1) res.push_back(nums2[i]);
}
return res;
}
};
参考文章:349. 两个数组的交集
Python
方法一
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
方法二
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums1 = list(set(nums1))
res = []
for i in range(len(nums1)):
if nums1[i] in nums2:
res.append(nums1[i])
return res