350. 两个数组的交集 II - 力扣(LeetCode)
可以使用哈希表(字典)来计算两个数组中每个元素的出现次数,然后取两者的最小值来构造交集。下面是 Python 实现:
from collections import Counter
def intersect(nums1, nums2):
# 统计两个数组中元素的出现次数
count1 = Counter(nums1)
count2 = Counter(nums2)
# 取交集,并按最小出现次数重复添加
result = []
for num in count1:
if num in count2:
result.extend([num] * min(count1[num], count2[num]))
return result
# 测试
nums1 = [4,9,5,4]
nums2 = [9,4,9,8,4]
print(intersect(nums1, nums2)) # 可能输出 [4,4,9]
解释:
Counter(nums1)
和Counter(nums2)
分别统计nums1
和nums2
中每个元素的出现次数。- 遍历
count1
的键(元素),如果该元素在count2
也存在,则取两者的最小出现次数,并添加到结果列表。 - 使用
extend
方法,将元素按出现的次数加入result
列表中。 - 最终返回
result
,即两个数组的交集。
这个方法的时间复杂度是 O(n + m),其中 n
和 m
是两个数组的长度,因为 Counter
统计次数是 O(n + m),最终遍历哈希表也是 O(n + m),所以整体复杂度较优。