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),所以整体复杂度较优。
516

被折叠的 条评论
为什么被折叠?



