集合是什么?
- 一种无序且唯一的数据结构
- ES6中有集合,名为Set
- 集合的常用操作:去重,判断某元素是否在集合中,求交集
Coding Part
// 去重
const arr = [1,1,2,2];
const arr2 = [...new Set(arr)];
// 判断元素是否在集合中
const set = new Set(arr);
const has = set.has(2);
// 求交集
const set2 = new Set([2,3]);
const set3 = new Set([...set].filter(item => set2.has(item)))
LeetCode #349 给定两个数组,编写一个函数来计算它们的交集。
示例
- 输入:nums1 = [1,2,2,1], nums2 = [2,2]
- 输出:[2]
- 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
- 输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
解题思路:
- 求交集且无序唯一
解题步骤:
- 用集合对nums1去重, 用new Set( )
- 遍历nums1,筛选出nums2也包含的值 用includes
复杂度:
- 时间复杂度:O(n²)或O(mn)
- 空间复杂度:O(n)
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
return [...new Set(nums1)].filter(item=>
nums2.includes(item)
)
};
前端与集合: 使用ES6的Set
- 使用Set对象:new、add、delete、has、size
- 迭代Set: 多种迭代方法、Set与Array互转、求交集、差集
let mySet = new Set();
// 添加元素
mySet.add(1);
mySet.add(5);
mySet.add(5);
// set中不能添加重复的基本数据类型
mySet.add('some text');
let o = {a: 1, b:2}
mySet.add(o)
// set中可以添加内存地址不同的引用类型
mySet.add({a: 1, b:2})
const has = mySet.has(o);
mySet.delete(5);
// 跌代方法
for(let [key,value] of mySet.entries()) console.log(key,value)
// set 转 arr 两种方法
const myArr1 = [...mySet]
const myArr2 =Array.from(mySet)
const mySet2 = new Set([1,2,3,4])
// 交集
const intersection = new Set([...mySet].filter(x=>mySet2.has(x)))
// 差集
const difference = new Set([...mySet].filter(x=> !mySet2.has(x)))
集合-章节总结
- 集合是一种无序且唯一的数据结构
- ES6中有集合,名为Set
- 集合常用操作:去重、判断某元素是否在集合中、求交集,差集
xuhao