两个对象数组交集_【LeetCode-349-Intersection of Two Arrays】两个数组的交集

53567975a92e5297311349daf463326a.png

""" 关键字: 输出结果是唯一,不考虑顺序,这个特征是哈希表的特征,所以输出结果的存放是哈希表。而题目中,是计算两个数组的交集,也不考虑重复元素和顺序,所以用哈希表来存数据。

步骤:

  1. 把num1的数据放入哈希表中。
  2. 挨个遍历num2数据,如果它同时在num1中,就加入最后的结果集。

算法复杂度:

  • 时间复杂度O(m+n): set的底层实现是hash表,所以插入和in都是O(1),m,n分别是数组的长度,有两个遍历所以是m+n
  • 空间复杂度O(1): 常数个变量

测试:

  • nums1 = [1,2,2,1], nums2 = [2,2]
  • nums1 = [4,9,5], nums2 = [9,4,9,8,4]
class Solution(object):
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        num1_set = set(nums1)
        union_set = set()
        for num in nums2:
            if num in num1_set:
                union_set.add(num)

        return union_set
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值