349.两个数组的交集

349. 两个数组的交集

方法一:

思想:

1. 比较nums1和nums2的数组长度,得到长度较短的数组(使用集合去重)和长度教程的数组

2.逐一访问较短数组s_nums元素,如果该元素存在于较长数组l_nums中,则将该元素放入交集数组中nums

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums = []
        l1, l2= len(nums1), len(nums2)
        if l1 != l2:
            if l1 > l2:
                s_nums = list(set(nums2))
                l_nums = nums1
            else:
                s_nums = list(set(nums1))
                l_nums = nums2
        else:
            s_nums = list(set(nums1))
            l_nums = nums2
        for i in s_nums:
            if i in l_nums:
                nums.append(i)
        return nums

方法二:排序+双指针

思想:

1. 将两个数组分别排序

2.使用index1和index2两个指针从0开始分别逐一访问nums1和nums2的数组元素,直到超出两个数组的范围

3.如果两个元素相等,如果是第一个相等的元素,则将该元素放入交集中,并将两指针都向右移动一位;如果不是第一个相等的元素,则需要判断该元素是否在交集中存在,不存在则加入,否则不加入,并将两指针都向右移动一位

4.如果其中一个元素小于另一个元素,则将指向较小元素的指针向右移动一位

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        #排序+双指针
        inter_nums = []
        l1 ,l2 = len(nums1), len(nums2)
        nums1.sort()
        nums2.sort()
        index1 ,index2 = 0, 0
        while index1 < l1 and index2 < l2:
            if nums1[index1] == nums2[index2]:
                if not inter_nums or nums1[index1] != inter_nums[-1]:
                    inter_nums.append(nums1[index1])
                index1 += 1
                index2 += 1    
            elif nums1[index1] < nums2[index2]:
                index1 += 1
            else:
                index2 += 1
        return inter_nums

重点:两个有序数组可以使用双指针获得两个数组的交集

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值