LeetCode—Python—349. 两个数组的交集 + 350. 两个

系统 1742 0

349. 两个数组的交集

1.1题目描述

https://leetcode-cn.com/problems/intersection-of-two-arrays

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]

说明:

  • 输出结果中的每个元素一定是唯一的。
  • 我们可以不考虑输出结果的顺序。

1.2代码详解

使用set集合

            
              class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)
        set2 = set(nums2)
        
        if len(set1) < len(set2):
            return self.set_insert(set1,set2)
        else:
            return self.set_insert(set2,set1)
    
    def set_insert(self, set1, set2):
        return [x for x in set1 if x in set2]
            
          

 

350. 两个数组的交集 II

2.1题目描述

https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]


示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]


说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。

进阶:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

2.2代码详解

            
              class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        counts = {} # key:元素 ,value:出现频次
        res = []

        for num in nums1:
            counts[num] = counts.get(num, 0) + 1 # 记录nums1 中每个数出现的频次
        # 遍历nums2
        for num in nums2:
            # counts[num] > 0 表示nums2 中有nums1 相同的元素
            if num in counts and counts[num] > 0:
                res.append(num)
                counts[num] -= 1 # 查找到对应后的元素失效

        return res
            
          

错误案例:

LeetCode—Python—349. 两个数组的交集 + 350. 两个数组的交集 II_第1张图片

原因:如测试用例中的 [5] ,字典中没有这个值


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论