两数组的交 II

题目描述:计算两个数组的交

样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

跟上一道题一样(详见:点击打开链接),都是计算两个数组的交集。不同的是,这道题求得交集不用去重(也就是有多少重复的,就把他们全部找到)。

上一道题我们一共用了三种方法解决问题,其实这道题方法也不止一种,不过我不一个个列举了。只提供一种解法:排序+两根指针(也就是对上一道题的第三种方法稍微做一点修改)

思路是这样:先把两个数组排序,然后用两根指针从前往后扫描两个数组,若元素相同,则将这个元素记录在结果列表中;若元素不同,则将小的那一个的指针后移;直到其中有一个数组遍历完毕。

代码如下:

class Solution:
    # @param {int[]} nums1 an integer array
    # @param {int[]} nums2 an integer array
    # @return {int[]} an integer array
    def intersection(self, nums1, nums2):
        result = []
        nums1.sort()
        nums2.sort()
        index1, index2 = 0, 0
        n1, n2 = len(nums1), len(nums2)
        while index1 < n1 and index2 < n2:
            if nums1[index1] == nums2[index2]:
                result.append(nums1[index1])
                index1 += 1
                index2 += 1
            elif nums1[index1] > nums2[index2]:
                index2 += 1
            else:
                index1 += 1
        return result
        # Write your code here
代码的细节我之前(上一道题中)已经讲过,此处不再啰嗦。不明白的话,请回看给出的链接( 点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值