Skip to main content

349.两个数组的交集

标签: array, hash-table, two-pointers

难度: Easy

通过率: 75.66%

原题链接: https://leetcode.com/problems/intersection-of-two-arrays/description/

题目描述

给定两个整数数组 nums1nums2 ,返回它们的交集。结果中的每个元素都必须是唯一的,并且可以以任意顺序返回。

解题思路

我们可以采用使用哈希集合(HashSet)的思路来解决此问题。步骤如下:

  1. 将第一个数组 nums1 转换为集合 set1,这样可以去掉重复的元素。
  2. 初始化一个空的集合 intersection 用于存储两个数组的交集。
  3. 遍历第二个数组 nums2,检查每个元素是否存在于 set1 中。
    • 如果存在,则将此元素加入到 intersection 中。
    • 由于 intersection 是集合,在添加元素时会自动去重。
  4. 最后将 intersection 转换为列表并返回即可。

这种方法利用了集合的快速查找特性,使得比较两个数组的过程更加高效。

代码实现

def intersection(nums1, nums2):
# 将nums1转化为集合去重
set1 = set(nums1)
# 用于存储结果的集合
intersection = set()
# 遍历nums2,找出交集
for num in nums2:
if num in set1:
intersection.add(num)
# 返回结果的列表
return list(intersection)

# 示例使用
print(intersection([1, 2, 2, 1], [2, 2])) # 输出: [2]

复杂度分析

时间复杂度:

O(m+n)O(m + n),其中 mm 是 nums1 的长度,nn 是 nums2 的长度。因为我们需要遍历两个数组各一次。

空间复杂度:

O(extmin(m,n))O( ext{min}(m, n)),用于存储结果集和其中一个数组的集合。