1、集合
一种无序且唯一的数据结构 实际上, 我们可以把集合想象成一个既没有重复元素,也没有顺序概念的数组
- js中可以用ES6的
Set语法,来表示集合. - 集合常用的操作: 去重、求交集、判断某元素是否在集合中
2、js中使用集合
// 声明一个集合
const list = new Set([1, 2, 3, 4, 5])
// 利用集合的特性 无序且唯一 去重
const arr = [1, 2, 1, 3, 3, 2]
const arr2 = [...new Set(arr)] // [1, 2, 3]
// 判断元素是否在集合中
const set = new Set(arr)
set.has(4) // false
// 求交集
const set1 = new Set([1, 2, 3, 4])
const set2 = new Set([11, 2, 23, 3])
const result = new Set([...set1].filter(item => set2.has(item)))
// [2, 3]
3、字典
与集合类似,字典也是一种存储唯一值的数据结构, 但它是以键值对的形式来存储
- js中可以用ES6的
Map语法,来表示字典. - 字典常用的操作: 键值对的增删该查.
4、js中使用字典
const map = new Map()
// 增
map.set('a', 'aa') // { a => aa }
map.set('b', 'bb') // { a => aa, b => bb }
// 删
map.delete('a') // { b => bb }
// map.clear() // 删除全部
// 改
map.set('b', 'bb1') // { b => bb1 }
5、leetCode
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和 为目标值 target 的那两个整数, 并返回它们的数组下标。
- 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
- 你可以按任意顺序返回答案。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
let l = 0; // 左指针
let res = 0
// 创建一个字典
const map = new Map();
for (let i = 0; i < s.length; i++) {
// 如果遇到重复字符串 将左指针移动到重复字符串的下一位
// 重复字符串位置不能小于左指针
if (map.has(s[i]) && map.get(s[i]) >= l) {
l = map.get(s[i]) + 1
}
// 取当前最大长度
res = Math.max(res, i - l + 1)
map.set(s[i], i)
}
return res
};