# 0349. 两个数组的交集 ## 题目地址(349. 两个数组的交集) <https://leetcode-cn.com/problems/intersection-of-two-arrays/> ## 题目描述 ``` <pre class="calibre18">``` 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 ``` ``` ## 前置知识 - hashtable ## 公司 - 阿里 - 腾讯 - 百度 - 字节 ## 思路 先遍历第一个数组,将其存到hashtable中, 然后遍历第二个数组,如果在hashtable中存在就push到return,然后清空hashtable即可。 ## 关键点解析 - 空间换时间 ## 代码 - 语言支持:JS, Python Javascript Code: ``` <pre class="calibre18">``` <span class="hljs-title">/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */</span> <span class="hljs-keyword">var</span> intersection = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">nums1, nums2</span>) </span>{ <span class="hljs-keyword">const</span> visited = {}; <span class="hljs-keyword">const</span> ret = []; <span class="hljs-keyword">for</span>(<span class="hljs-keyword">let</span> i = <span class="hljs-params">0</span>; i < nums1.length; i++) { <span class="hljs-keyword">const</span> num = nums1[i]; visited[num] = num; } <span class="hljs-keyword">for</span>(<span class="hljs-keyword">let</span> i = <span class="hljs-params">0</span>; i < nums2.length; i++) { <span class="hljs-keyword">const</span> num = nums2[i]; <span class="hljs-keyword">if</span> (visited[num] !== <span class="hljs-params">undefined</span>) { ret.push(num); visited[num] = <span class="hljs-params">undefined</span>; } } <span class="hljs-keyword">return</span> ret; }; ``` ``` Python Code: ``` <pre class="calibre18">``` <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">intersection</span><span class="hljs-params">(self, nums1: List[int], nums2: List[int])</span> -> List[int]:</span> visited, result = {}, [] <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums1: visited[num] = num <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums2: <span class="hljs-keyword">if</span> num <span class="hljs-keyword">in</span> visited: result.append(num) visited.pop(num) <span class="hljs-keyword">return</span> result <span class="hljs-title"># 另一种解法:利用 Python 中的集合进行计算</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">intersection</span><span class="hljs-params">(self, nums1: List[int], nums2: List[int])</span> -> List[int]:</span> <span class="hljs-keyword">return</span> set(nums1) & set(nums2) ``` ``` **复杂度分析** - 时间复杂度:O(N)O(N)O(N) - 空间复杂度:O(N)O(N)O(N) 更多题解可以访问我的LeetCode题解仓库:<https://github.com/azl397985856/leetcode> 。 目前已经37K star啦。 关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。 ![](https://img.kancloud.cn/cf/0f/cf0fc0dd21e94b443dd8bca6cc15b34b_900x500.jpg)