数组与哈希简单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 <= 10000 <= nums1[i], nums2[i] <= 1000
解题主线
- 第一个集合支持 O(1) 期望成员判断,第二个集合负责结果去重。
解法 1:双哈希集合
先收集 nums1 的不同值,再扫描 nums2,把命中值加入结果集合。
-
时间复杂度: O(n + m) 期望
-
空间复杂度: O(n + min(n, m))
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