原题
数组与哈希简单1 种解法

#349两个数组的交集

返回两个数组共有的不同元素,结果顺序任意。

#数组#哈希集合

原题

给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

示例 1:

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

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

查看原题

解题主线

  1. 第一个集合支持 O(1) 期望成员判断,第二个集合负责结果去重。

解法 1:双哈希集合

先收集 nums1 的不同值,再扫描 nums2,把命中值加入结果集合。

  • 时间复杂度: O(n + m) 期望

  • 空间复杂度: O(n + min(n, m))

JAVA
import java.util.HashSet;
import java.util.Set;

final class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        // first 只负责常数期望时间的成员判断,不承担输出计数。
        Set<Integer> first = new HashSet<>();
        for (int value : nums1) first.add(value);
        // common 独立去重,保证 nums2 中的重复命中只输出一次。
        Set<Integer> common = new HashSet<>();
        for (int value : nums2) {
            if (first.contains(value)) common.add(value);
        }
        int[] result = new int[common.size()];
        int index = 0;
        for (int value : common) result[index++] = value;
        return result;
    }
}

边界与易错点

  • 交集要求每个值只出现一次,不能直接按第二个数组的命中次数输出。
  • 同文件的 isAnagram3 已归并到 242,不属于本题。

整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

  • easy/Q349_intersection.java