📅  最后修改于: 2023-12-03 15:35:50.653000             🧑  作者: Mango
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9]
说明:
解题思路:
代码实现:
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
if len(nums1) > len(nums2):
return self.intersect(nums2, nums1)
m = {}
for num in nums1:
m[num] = m.get(num, 0) + 1
intersection = []
for num in nums2:
count = m.get(num, 0)
if count > 0:
intersection.append(num)
m[num] = count - 1
return intersection
时间复杂度:O(m + n),其中 m 和 n 分别是两个数组的长度。需要遍历两个数组并对哈希表进行操作,哈希表操作的时间复杂度是 O(1),因此总时间复杂度与两个数组的长度和呈线性关系。
空间复杂度:O(min(m,n)),其中 m 和 n 分别是两个数组的长度。对较短的数组使用哈希表进行存储,空间复杂度是 O(min(m,n))。
这道题有一个细节:要求输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。这时候使用哈希表记录数字出现次数的方法就派上大用场了,只要在哈希表中记录每个数字出现的次数,不断更新即可。