LeetCodeAnimation/0350-Intersection-of-Two-Arrays-II/Article/0350-Intersection-of-Two-Arrays-II.md
程序员吴师兄 f104850874 整理文件
2020-04-17 15:39:41 +08:00

84 lines
2.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LeetCode 350 号问题两个数组的交集 II
> 本文首发于公众号图解面试算法 [图解 LeetCode ](<https://github.com/MisterBooo/LeetCodeAnimation>) 系列文章之一。
>
> 同步博客https://www.algomooc.com
题目来源于 LeetCode 上第 350 号问题两个数组的交集 II题目难度为 Easy目前通过率为 41.8%
### 题目描述
给定两个数组编写一个函数来计算它们的交集
**示例 1:**
```
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
```
**示例 2:**
```
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
```
**说明**
- 输出结果中每个元素出现的次数应与元素在两个数组中出现的次数一致
- 我们可以不考虑输出结果的顺序
**进阶:**
- 如果给定的数组已经排好序呢你将如何优化你的算法
- 如果 *nums1* 的大小比 *nums2* 小很多哪种方法更优
- 如果 *nums2* 的元素存储在磁盘上磁盘内存是有限的并且你不能一次加载所有的元素到内存中你该怎么办
### 题目解析
容器类 [map](https://zh.cppreference.com/w/cpp/container/map) 的使用。
- 遍历 num1通过map容器 record 存储 num1 的元素与频率
- 遍历 num2 record 中查找是否有相同的元素该元素的存储频率大于0如果有用map容器resultVector 进行存储同时该元素的频率减一
### 动画描述
![](../Animation/Animation.gif)
### 代码实现
```
// 350. Intersection of Two Arrays II
// https://leetcode.com/problems/intersection-of-two-arrays-ii/description/
// 时间复杂度: O(nlogn)
// 空间复杂度: O(n)
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int, int> record;
for(int i = 0 ; i < nums1.size() ; i ++){
record[nums1[i]] += 1;
}
vector<int> resultVector;
for(int i = 0 ; i < nums2.size() ; i ++){
if(record[nums2[i]] > 0){
resultVector.push_back(nums2[i]);
record[nums2[i]] --;
}
}
return resultVector;
}
};
```
![](../../Pictures/qrcode.jpg)