数据结构(五)集合
集合是什么?
- 一种无序且唯一的数据结构
- 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
* 集合常用操作:去重、判断某元素是否在集合中、求交集,差集