数据结构(五)集合


集合是什么?

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

声明:Xuhao's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 数据结构(五)集合


Carpe Diem and Do what I like