给定两个数组,编写一个函数来计算它们的交集。
示例 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.一开始写的代码很复杂,先判断在不在集合里面,不在再往里面添加。
其实就一直向里面添加就好了,集合会自己去重的。