哈希算法题目:两个数组的交集
字数 972 2025-10-27 11:27:25
哈希算法题目:两个数组的交集
题目描述:
给定两个整数数组 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:理解问题核心要求
- 我们需要找出两个数组中都出现的数字。
- 结果中每个数字只能出现一次,不能有重复。
- 结果的顺序不重要。
步骤 2:选择合适的数据结构
- 由于结果需要去重,我们可以考虑使用哈希集合(HashSet)这种自动去重的数据结构。
- 哈希集合能够以平均 O(1) 的时间复杂度进行元素的查找和插入,非常高效。
步骤 3:具体算法思路
- 创建第一个哈希集合 set1,遍历数组 nums1,将其所有元素存入 set1。这一步会自动去除 nums1 中的重复元素。
- 创建第二个哈希集合 resultSet,用于存放最终的交集结果。
- 遍历数组 nums2,对于 nums2 中的每个元素,检查它是否存在于 set1 中:
- 如果存在,说明这个元素是公共元素,将其添加到 resultSet 中。由于 resultSet 是集合,重复添加同一元素不会导致结果重复。
- 遍历结束后,resultSet 中存储的就是我们要求的、去重后的交集元素。
- 将 resultSet 转换成一个数组作为最终结果返回。
步骤 4:复杂度分析
- 时间复杂度:O(m + n),其中 m 和 n 分别是数组 nums1 和 nums2 的长度。我们分别对两个数组进行了一次遍历,而哈希集合的查找操作是 O(1) 的。
- 空间复杂度:O(m),在最坏情况下(nums1中所有元素都不重复),我们需要使用 O(m) 的空间来存储 set1。resultSet 使用的空间最多为 O(min(m, n))。
步骤 5:关键点与扩展
- 关键点在于利用哈希集合的“唯一性”和“快速查找”特性,高效地完成去重和判断元素是否存在。
- 如果给定的数组已经是有序的,也可以使用双指针的方法来解决,但哈希法在数组无序时是更通用和直接的选择。