两个数组的交集

学习目标:

每日一题-求两个数组的交集

学习内容:

题目

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

示例1

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

示例2

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

双指针法解题思路:

先对两个数组进行排序,然后使用两个指针,分别指向两个数组开始的位置。
如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。
如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较

 def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1.sort()
        nums2.sort()
        right = 0 
        left = 0
        result = []
        while right < len(nums1) and left < len(nums2):
            if nums1[right] == nums2[left]:
                result.append(nums1[right])
                right+=1
                left+=1
            elif nums1[right] > nums2[left]:
                 left+=1
            else:
                 right+=1
        return result

在这里插入图片描述
解题思路二
遍历nums1中的所有元素,把它存放到map中,其中key就是nums1中的元素,value就是这个元素在数组nums1中出现的次数。
遍历nums2中的所有元素,查看map中是否包含nums2的元素,如果包含,就把当前值加入到集合list中,然后对应的value要减1。

   def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        my_map = {}
        result = []
        for item in nums1:
           if item in my_map.keys():
              my_map[item]+=1
           else:
              my_map[item]=1
        for item in nums2:
            if my_map.get(item) and my_map.get(item) > 0:
                result.append(item)
                my_map[item]-=1
        return result

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值