python-leetcode-350. 两个数组的交集 II

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]

解释:

  1. Counter(nums1)Counter(nums2) 分别统计 nums1nums2 中每个元素的出现次数。
  2. 遍历 count1 的键(元素),如果该元素在 count2 也存在,则取两者的最小出现次数,并添加到结果列表。
  3. 使用 extend 方法,将元素按出现的次数加入 result 列表中。
  4. 最终返回 result,即两个数组的交集。

这个方法的时间复杂度是 O(n + m),其中 nm 是两个数组的长度,因为 Counter 统计次数是 O(n + m),最终遍历哈希表也是 O(n + m),所以整体复杂度较优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值