题意:
给定两个数组,编写一个函数来计算它们的交集。
思路:
- 交集是集合,没有重复元素。先把数组去重,再来算交集
- 遍历长度更短的集合,可以提高效率。
- 在遍历第一个集合的里面来进行判断
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
const set_intersection = (set1,set2)=>{
//根据数组大小交换操作的数组,选择较小的集合
if(set1.size > set2.size){
return set_intersection(set2,set1)
}
//创建一个保存交集的集合
const intersection = new Set()
//遍历较小的集合,判断其中的每个元素是否在另一个集合中
for (const num of set1){
//若元素也在另一个集合中,则将元素添加到返回值
if (set2.has(num)){
intersection.add(num)
}
}
//将集合以数组形式返回
return [...intersection]
}
var intersection = function(nums1, nums2) {
//使用两个集合分别存储两个数组中的元素
const set1 = new Set(nums1)
const set2 = new Set(nums2)
return set_intersection(set1,set2)
};