📖Map和Set巧解力扣算法问题

简介: 📖Map和Set巧解力扣算法问题

前言


问题一:什么是Map和Set?


ES6以前,在JavaScript中实现“键/值”式存储可以使用Object来方便高效的完成,也就是使用对象属性作为键,再使用属性来引用值,像下面这样


let student = {
    name: '啊呜',
    sex: 'male',
    age: 18
}
复制代码


但是这种实现并非没有问题,这里的键只能是对象的属性,于是就出现了Map这一新的集合类型,为JavaScript带来了真正的键/值存储机制,我们可以这样初始化映射:


const map = new Map([
    ['key1','value1'],
    ['key2','value2'],
    ['key3','value3'],
])
复制代码


ES6还新增了Set这一种新的集合类型,Set在很多方面都像是加强的Map,这是因为它们的大多数API和行为都是共有的。Set集合类型的特点是不能存储重复元素,成员值都是唯一且没有重复的值


问题二:Map和Set的基本API怎么用?


Map的API:


  • get() :返回键值对
  • set() :添加键值对,返回实例
  • delete() :删除键值对,返回布尔
  • has() :检查键值对,返回布尔
  • clear() :清除所有成员
  • keys() :返回以键为遍历器的对象
  • values() :返回以值为遍历器的对象
  • entries() :返回以键和值为遍历器的对象
  • forEach() :使用回调函数遍历每个成员

Set的API:

  • add() :添加值,返回实例
  • delete() :删除值,返回布尔
  • has() :检查值,返回布尔
  • clear() :清除所有成员
  • keys() :返回以属性值为遍历器的对象
  • values() :返回以属性值为遍历器的对象
  • entries() :返回以属性值和属性值为遍历器的对象
  • forEach() :使用回调函数遍历每个成员


好啦,到这,相信你对JS中的Map和Set有了一定的了解,我们现在尝试使用这两种集合类型,在LeetCode中大显身手~


LeetCode20:有效的括号


给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。示例1:输入: s = "()"

输出: true示例2:输入: s = "()[]{}"

输出: true示例 3:输入: s = "(]"

输出: false

这题的思路是使用栈+Map来解决,直接上代码:


50b7a21c595f4b2f8d26b52d13097aa0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


LeetCode141:环形链表


给定一个链表,判断链表中是否有环。 示例:

cc4369627d9b4a52bd86f12670a2a169_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


输入: head = [3,2,0,-4], pos = 1

输出: true


这题我的思路是使用Set来解决,当然还有一种方法,用快慢指针来解决,但是比较难想到,而且比较反人类,我们这里只介绍Set,清晰易懂~


5663effad30046d99105ecb517812bb2_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


最后


⚽这篇文章主要介绍了Map和Set在部分算法问题中的妙用~,相信你应该有些许收获,后面会多多更新算法相关的文章,So关注一波呀~

⚾如果你对这篇文章感兴趣欢迎点赞关注+收藏,更多精彩知识正在等你!😘

相关文章
|
7天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
19 3
|
2月前
|
存储 自然语言处理 C++
map和set的简单介绍
map和set的简单介绍
20 1
|
2月前
|
存储 算法 JavaScript
怎么刷算法,leetcode上有哪些经典题目
怎么刷算法,leetcode上有哪些经典题目
16 0
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
25 1
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
23 0
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
31 0
|
2月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
23 0
|
8天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
12天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
12天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
15 3