LeetCode热题(JS版) -349. 两个数组的交集

119 阅读1分钟

题目描述

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

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

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

解题思路

可以使用哈希集合(Set)来解决这个问题。首先将第一个数组中的所有元素添加到集合中,然后遍历第二个数组,在集合中查找是否存在相同的元素,如果存在,则将其添加到结果集合中。

以下是使用Typescript实现的代码:

typescriptCopy code
function intersection(nums1: number[], nums2: number[]): number[] {
    const set1 = new Set(nums1);
    const resultSet = new Set<number>();

    for (const num of nums2) {
        if (set1.has(num)) {
            resultSet.add(num);
        }
    }

    return Array.from(resultSet);
}

复杂度分析

  • 时间复杂度:O(m + n),其中 m 是第一个数组的长度,n 是第二个数组的长度。构建第一个数组的集合需要 O(m) 的时间复杂度,遍历第二个数组并在集合中查找需要 O(n) 的时间复杂度,因此总的时间复杂度为 O(m + n)。
  • 空间复杂度:O(min(m, n)),最坏情况下,两个数组没有任何交集,结果集合的大小为 0。因此,集合的大小取决于两个数组中较小的那个,即空间复杂度为 O(min(m, n))。