两个数组的交集 II(unorder_map)1
在给定的问题中,我们被要求找出两个整数数组(`nums1` 和 `nums2`)的交集。这是一个常见的编程题目,特别是在面试和在线编程挑战网站如 LeetCode 上。这里有两个不同的解决方案,一个是基于排序,另一个是基于哈希映射。 **排序方法**: 1. 首先对两个数组进行排序。使用 `sort()` 函数可以轻松地实现这个操作。 2. 创建一个新的空数组 `result` 来存储交集元素。 3. 初始化两个指针 `p1` 和 `p2` 分别指向排序后的 `nums1` 和 `nums2` 的起始位置。 4. 使用 `while` 循环,只要两个指针没有越界,就继续进行比较。比较两个指针所指向的元素,如果 `nums1[p1]` 小于 `nums2[p2]`,则将 `p1` 右移;如果 `nums1[p1]` 大于 `nums2[p2]`,则将 `p2` 右移。如果两者相等,将元素添加到结果数组 `result` 并同时将两个指针右移。 5. 返回结果数组 `result`。 **哈希映射方法**: 1. 使用 `unordered_map`(无序映射)数据结构,将 `nums1` 中的所有元素及其出现次数存储起来。对于每个元素 `num`,将其作为键,增加对应的值(计数)。 2. 创建一个空的 `vector` 容器 `vec` 用于存储交集。 3. 遍历 `nums2`,检查每个元素是否在 `umap`(哈希映射)中。如果元素存在且计数不为零,说明这是公共元素。将元素添加到 `vec`,然后减少 `umap` 中对应的计数。 4. 当遇到某个元素在 `nums2` 中重复出现时,`umap` 中的计数会递减,直到计数为零,表示所有匹配的元素都已被添加到 `vec`。 5. 返回结果数组 `vec`。 这两种方法都可以有效地找出两个数组的交集。排序方法的时间复杂度为 O(n log n),主要取决于排序操作,而空间复杂度为 O(n)。哈希映射方法的时间复杂度为 O(m + n),其中 m 和 n 分别为两个数组的大小,因为我们需要遍历两个数组,空间复杂度也为 O(n),取决于较大的数组。哈希映射方法通常更快,因为它避免了排序过程,但在处理大量重复元素时,可能会消耗更多内存。选择哪种方法取决于具体的应用场景和性能需求。