给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。思考
这道题思路很简单,遍历nums2,看里面的元素在nums1里面有没有就可以了,有的话就放到一个集合里。
但注意,判断在不在nums1里,如果是在数组中搜索,那么复杂度是O(n)。如果在map或者set里判断有没有,复杂度是O(1).
所以先要把num1转换成集合set.
这里可以新建一个集合,遍历nums1用set.add()一个个添加,也可以用新方法直接生成。
代码实现
/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersection = function(nums1, nums2) { let set = new Set(nums1) let result = new Set() // let set = new Set() // for (let i = 0; i < nums1.length; i++) { // set.add(nums1[i]) // } for (let i = 0; i < nums2.length; i++) { if (set.has(nums2[i])) { result.add(nums2[i]) } } return Array.from(result) };
知识
1.用数组直接生成集合,在Set里面添加数组参数。
let set = new Set(nums1)2.将set转换为数组
Array.from(result)
3.一开始写的代码很复杂,先判断在不在集合里面,不在再往里面添加。
其实就一直向里面添加就好了,集合会自己去重的。
