LeetCode:350(Python)—— 两个数组的交集 II(简单)

两个数组的交集 II

概述:给你两个整数数组 nums1 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

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

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

方法一:哈希表

思路:用字典分别对两个列表进行存储,然后取交集元素在两个字典中的最小次数即可。

# 哈希表
# 用字典分别对两个列表进行存储,然后取交集元素在两个字典中的最小次数即可。
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        if len(nums1) > len(nums2):
            return self.intersect(nums2, nums1)
        nums_dict = collections.Counter()
        for num in nums1:
            nums_dict[num] += 1
        intersection = []
        for num in nums2:
            if (count:= nums_dict.get(num, 0)) > 0:
                intersection.append(num)
                nums_dict[num] -= 1
                if nums_dict[num] == 0:
                    nums_dict.pop(num)
        return intersection

方法二:排序+双指针

思路:先排序,然后指针分别指向两个列表进行判断,如果重复跳过即可。

# 排序+双指针
# 先排序,然后指针分别指向两个列表进行判断,如果重复跳过即可。
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1.sort()
        nums2.sort()
        length_1, length_2 = len(nums1), len(nums2)
        intersection = []
        index_1, index_2 = 0, 0 
        while index_1 < length_1 and index_2 < length_2:
            if nums1[index_1] < nums2[index_2]:
                index_1 += 1
            elif nums1[index_1] > nums2[index_2]:
                index_2 += 1
            else:
                intersection.append(nums1[index_1])
                index_1 += 1
                index_2 += 1
        return intersection

总结

简单题,挑战失败,提桶跑路。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值