题目描述
原题链接:350. 两个数组的交集 II
解题思路
因为交集中不去重,可存在重复元素,因此采用unordered_map
,将元素作为下标Key,每有一个元素,则对应的Value加一。寻找交集时,遍历存储过的Hash表,Value不为0时,就将其加入到res
中,然后将该Key对应的Value减一。
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
unordered_map<int, int> record;
for(int num : nums1) {
record[num]++;
}
for(int i = 0; i < nums2.size(); i++) {
if(record[nums2[i]] != 0) {
res.push_back(nums2[i]);
record[nums2[i]]--;
}
}
return res;
}
};
Python
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums1_dict = Counter(nums1)
res = []
for num in nums2:
if num in nums1_dict.keys():
res.append(num)
nums1_dict[num] -= 1
if nums1_dict[num] == 0:
del nums1_dict[num]
return res
时间复杂度
O
(
n
)
O(n)
O(n)
空间复杂度
O
(
n
)
O(n)
O(n)