跳至主要內容

集合

Mr.Chen数据结构与算法集合大约 1 分钟约 401 字

简介

一种无序且唯一的数据结构

ES6中有集合,名为Set

集合的常用操作:去重、判断某元素是否在集合中、求交集

// 去重
const arr = [1, 1, 1]
const arr1 = [...new Set(arr)]
console.log(arr1) // [1]

// 判断某元素是否在集合中
const set = new Set([1, 2])
const has = set.has(1)
console.log(has) // true
// 求交集
const set2 = new Set([3, 4, 1])
const set3 = new Set([...set].filter((item) => set2.has(item)))
console.log(set3) // Set { 1 }

LeetCode:349. 两个数组的交集

[349. 两个数组的交集open in new window](https://leetcode-cn.com/problems/intersection-of-two-arrays/)

  • 解题思路

求交集且无序唯一,使用集合

  • 解题步骤

用集合对 nums1 去重,然后遍历 nums1,筛选出 nums2 也包含的值

/*
 * @lc app=leetcode.cn id=349 lang=javascript
 *
 * [349] 两个数组的交集
 */

// @lc code=start
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function (nums1, nums2) {
  // 集合
  // return [...new Set(nums1)].filter((item) => {
  //     return nums2.includes(item)
  // })
  // 字典
  let m = new Map()
  nums1.forEach((item) => {
    m.set(item, true)
  })
  let res = []
  nums2.forEach((item) => {
    if (m.get(item)) {
      res.push(item)
      m.delete(item)
    }
  })
  return res
}
// @lc code=end

前端与集合:使用 ES6 中 Set

使用 Set 对象:newadddeletehassize

迭代 Set:多种迭代方法(for...of)、Set 与 Array 互转、求交集/差集

Set,Array 互转

  • Set=>Array
const arr1 = [...new Set([1, 2, 3, 4, 1])]
const arr2 = Array.form(new Set[(1, 2, 3, 4, 1)]())
  • Array=>Set
const set = new Set([1, 23, 1, 3])

交集/差集

const set1 = new Set([1, 23, 1])
const set2 = new Set([23])
// 交集
const newSet = new Set(
  [...set1].filter((item) => {
    return set2.has(item)
  })
)
// 差集
const newSet2 = new Set(
  [...set1].filter((item) => {
    return !set2.has(item)
  })
)
上次编辑于: