1.什么是集合?
- 一种有序且唯一的数据结构
- ES6中封装好了集合,名为Set
2.常用操作
- 判断元素是否在集合中 has
- 添加元素 add
- 删除元素 delete
- 集合大小 size
- 求交集
- 求并集
- 求差集
- 集合转数组
- 数组转集合
3.使用示例
//创建集合
let a = new Set([1,2,3]);
let b = new Set([3,4,5]);
//判断元素是否在集合中
const has = a.has(1); // true
//添加元素到集合中
a.add(6); // {1,2,3,6}
//删除集合中元素
a.delete(6); // {1,2,3}
//集合大小
console.log(a.size) //3
//求并集
let union = new Set([...a,...b]); //{1,2,3,4,5}
//求交集,a中有并且b中也有的元素
let intersect = new Set([...a].filter(x => b.has(x))); //{3}
//求差集,a中有并且b中没有的元素
let difference = new Set([...a].filter(x => !b.has(x))); {1,2}
//集合转数组
const myArray1 = [...a];
const myArray2 = Array.from(a);
//数组转集合
const mySet = new Set([8,8,8]);
4.LeetCode
接下来使用集合这个数组结构来刷LeetCode有关集合的题目,巩固提升对集合的了解。
题号349.求两个数组的交集(简单)
题目要求:
解题思路:
使用集合,过滤出数组一有,数组二也有的元素,将数组转换为集合自动去重,将集合转换为数组返回。
编写代码:
var intersection = function(nums1, nums2) {
let intersect = new Set([...nums1].filter(x => nums2.includes(x)));
return [...intersect];
};
复杂度分析
- 时间复杂度: O(m*n) ,m是nums1的长度,n是nums2的长度。
- 空间复杂度: O (m) 去重后nums1的长度