js数据结构之集合Set 附力扣算法题

集合

  • 一种无序且唯一的数据结构,不能重复,区别于栈、队列、链表
  • ES6中有集合,名为Set
  • 集合常用的操作:去重、判断某元素是否在集合中、求交集
// 去重
const arr = [1,2,2]
const arr2 = [...new Set(arr)]

// 判断元素是否在集合中
const set = new Set(arr)
const has = set.has(1) // true
const has = set.has(4) // false

// 求set2与set的交集
const set2 = new Set([2, 3])
const set3 = new Set([...set].filter(item => set2.has(item)))
力扣 349:两个数组的交集

在这里插入图片描述
349 解题思路

  • 用集合对nums1去重
  • 遍历nums1,筛选出nums2也包含的值
// 时间复杂度O(m * n)  空间复杂度O(m)
function inetersection(nums1. nums2) {
	return [...new Set(num1)].filter(n = > nums2.includes(n));
}

Set操作

  • 使用Set对象:new、add、delete、has、size

  • 迭代Set:多种迭代方法、set与array互转、求交集/差集

    new、add
    let mySet = new Set
    mySet.add(1)
    mySet.add(1) // 重复添加不会成功
    mySet.add('some thing')
    
    let o = {a:1, b:2}
    mySet.add(o)
    mySet.add({a:1, b:2}) //此处添加看起来完全一样的对象,可以成功添加,基础知识请自行复习吧
    
    mySet.has(1) // true
    mySet.has('some thing') // true
    mySet.has(o) // true
    
    delete、size
    mySet.delete(1) // 删除集合
    删除前mySet.size = 4,删除后size = 3
    
    迭代
    for (let item of mySet) console.log(item)
    for (let item of mySet.keys()) console.log(item)
    for (let item of mySet.values()) console.log(item) // 前三项都打印 some thing、{a:1, b:2}、{a:1, b:2}
    for (let [key, value] of mySet.entries()) console.log(key, value) // key value的值是一样的,重复打印以上三项
    
    Set 、 Array互转
    // set转array
    const myArr = [...mySet]
    const myArr = Array.from(mySet)
    
    // array转set
    const mySet2 = new Set([1,2,3])
    
    求交集
    // 求两个集合的交集 并返回一个集合
    const a = new Set([...mySet].filter(n = > mySet2.has(n)))
    
    求差集合
    // 即一个set中有,另一个set没有的集合
    const a = new Set([...mySet].filter(n = > !mySet2.has(n)))
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值