📜  | |第 40 题(1)

📅  最后修改于: 2023-12-03 15:35:50.653000             🧑  作者: Mango

| |第 40 题介绍

题目描述

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

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

示例 2:

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

说明:

  • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  • 我们可以不考虑输出结果的顺序。
解法

解题思路:

  1. 使用哈希表存储较短的数组中的数字及其出现次数。
  2. 遍历另一个数组,如果当前元素在哈希表中出现,加入答案并将哈希表中的次数减1。

代码实现:

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        if len(nums1) > len(nums2):
            return self.intersect(nums2, nums1)
        m = {}
        for num in nums1:
            m[num] = m.get(num, 0) + 1
        intersection = []
        for num in nums2:
            count = m.get(num, 0)
            if count > 0:
                intersection.append(num)
                m[num] = count - 1
        return intersection
复杂度分析

时间复杂度:O(m + n),其中 m 和 n 分别是两个数组的长度。需要遍历两个数组并对哈希表进行操作,哈希表操作的时间复杂度是 O(1),因此总时间复杂度与两个数组的长度和呈线性关系。

空间复杂度:O(min(m,n)),其中 m 和 n 分别是两个数组的长度。对较短的数组使用哈希表进行存储,空间复杂度是 O(min(m,n))。

结语

这道题有一个细节:要求输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。这时候使用哈希表记录数字出现次数的方法就派上大用场了,只要在哈希表中记录每个数字出现的次数,不断更新即可。