2021年3月

集合是什么?

  • 一种无序且唯一的数据结构
  • 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]   说明:

输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。

解题思路:

  1. 求交集且无序唯一

解题步骤:

  1. 用集合对nums1去重, 用new Set( )
  2. 遍历nums1,筛选出nums2也包含的值 用includes

复杂度:

  1. 时间复杂度:O(n²)或O(mn)
  2. 空间复杂度: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
* 集合常用操作:去重、判断某元素是否在集合中、求交集,差集