0
点赞
收藏
分享

微信扫一扫

力扣-第350题-两个数组的交集 II(python)

古月无语 2022-02-10 阅读 57

给你两个整数数组 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]


网址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/ha-xi-biao-liang-ge-shu-zu-de-jiao-ji-ii-fkwo/


解题思路:
通过题意,寻找两数组是否有相同项,并且提示中说可以不要求交集的顺序。
既然如此,我们便可以先行将数组排序,方便我们查找,然后正式流程如下:

  • 创建一个指针 ii 指向 nums1nums1 数组首位,指针 jj 指向 nums2nums2 数组首位。
  • 创建一个临时栈,用于存放结果集。
  • 开始比较指针 ii 和指针 jj 的值大小,若两个值不等,则数字小的指针,往右移一位。
  • 若指针 ii 和指针 jj 的值相等,则将交集压入栈。
  • 若 numsnums 或 nums2nums2 有一方遍历结束,代表另一方的剩余值,都是唯一存在,且不会与之产生交集的。

图解:

  • 第一步:首先将nums1和num2排序

在这里插入图片描述

  • 第二步:排序后如下

在这里插入图片描述
第三步:创建指针i,j
在这里插入图片描述

  • 第四步:

在这里插入图片描述

  • 第五步:

在这里插入图片描述

  • 第六步:

在这里插入图片描述

  • 第七步:

在这里插入图片描述

  • 第八步

在这里插入图片描述

  • 第九步:

在这里插入图片描述

  • 第十步:

在这里插入图片描述


代码逐步解析:双指针方法

class Solution:
    def intersect(self, nums1, nums2):
        print('原nums1:',nums1)
        print('原nums2:',nums2)
        nums1.sort()
        nums2.sort()
        print('后nums1:',nums1)
        print('后nums2:',nums2)

        length1, length2 = len(nums1), len(nums2)

        print('length1:', length1)
        print('length2:', length2)

        intersection = list()
        index1 = index2 = 0
        while index1 < length1 and index2 < length2:
            print('index1:', index1)
            print('index2:', index2)
            print('nums1[index1]:', nums1[index1])
            print('nums2[index2]:', nums2[index2])

            if nums1[index1] < nums2[index2]:
                index1 += 1
            elif nums1[index1] > nums2[index2]:
                index2 += 1
            else:
                intersection.append(nums1[index1])
                index1 += 1
                index2 += 1

        return intersection


if __name__ == '__main__':
    s = Solution()
    nums1 = [1, 2, 2, 1]
    nums2 = [2, 2]

    result_list = s.intersect(nums1, nums2)
    print('result_list:', result_list)

输出为:

原nums1: [1, 2, 2, 1]
原nums2: [2, 2]
后nums1: [1, 1, 2, 2]
后nums2: [2, 2]

length1: 4
length2: 2

index1: 0
index2: 0
nums1[index1]: 1
nums2[index2]: 2

index1: 1
index2: 0
nums1[index1]: 1
nums2[index2]: 2

index1: 2
index2: 0
nums1[index1]: 2
nums2[index2]: 2

index1: 3
index2: 1
nums1[index1]: 2
nums2[index2]: 2

result_list: [2, 2]

举报

相关推荐

0 条评论