1. 问题分析与解法思路
当我们需要找出两个数组的交集时,最直观的想法就是遍历两个数组,找出共同存在的元素。但这种方法的时间复杂度是O(n²),当数组较大时效率会很低。这里我们采用更高效的集合(Set)操作来解决这个问题。
集合(Set)是一种不允许重复元素的数据结构,正好符合题目中"输出结果中的每个元素一定是唯一的"这一要求。Java中的HashSet基于哈希表实现,查找和插入操作的平均时间复杂度都是O(1),这使得我们的解法非常高效。
核心思路分三步:
- 将第一个数组转换为集合,自动去重
- 将第二个数组转换为集合,自动去重
- 遍历第二个集合,检查元素是否存在于第一个集合中
这种解法的时间复杂度是O(m+n),其中m和n分别是两个数组的长度,因为集合的插入和查找操作都是O(1)的时间复杂度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Java实现详解
让我们仔细分析提供的Java代码实现:
java复制Set<Integer> res = new HashSet<>();
Set<Integer> set = Arrays.stream(nums1).boxed().collect(Collectors.toSet());
Set<Integer> set1 = Arrays.stream(nums2).boxed().collect(Collectors.toSet());
for (int num : set1) {
if (set.contains(num)) {
res.add(num);
}
}
return res.stream().mapToInt(Integer::intValue).toArray();
2.1 代码逐行解析
-
Set<Integer> res = new HashSet<>();
创建一个空的HashSet用于存储结果。选择HashSet是因为它能够自动去重且查找速度快。 -
Set<Integer> set = Arrays.stream(nums1).boxed().collect(Collectors.toSet());
将第一个数组nums1转换为Set:Arrays.stream(nums1):将数组转换为流(
