📖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关注一波呀~

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

相关文章
|
8月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
459 2
|
11月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
686 1
|
12月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
736 156
|
8月前
|
存储 算法 容器
set_map的实现+set/map加持秒杀高频算法题锻炼算法思维
`set`基于红黑树实现,支持有序存储、自动去重,增删查效率为O(logN)。通过仿函数可自定义排序规则,配合空间配置器灵活管理内存。不支持修改元素值,迭代器失效需注意。`multiset`允许重复元素。常用于去重、排序及查找场景。
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
377 2
|
8月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
12月前
|
算法 数据安全/隐私保护
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
本项目实现了一种基于Logistic Map混沌序列的数字信息加解密算法,使用MATLAB2022A开发并包含GUI操作界面。支持对文字、灰度图像、彩色图像和语音信号进行加密与解密处理。核心程序通过调整Logistic Map的参数生成伪随机密钥序列,确保加密的安全性。混沌系统的不可预测性和对初值的敏感依赖性是该算法的核心优势。示例展示了彩色图像、灰度图像、语音信号及文字信息的加解密效果,运行结果清晰准确,且完整程序输出无水印。
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
|
12月前
|
存储 C++ 容器
unordered_set、unordered_multiset、unordered_map、unordered_multimap的介绍及使用
unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。在unordered_set中,元素的值同时也是唯一地标识它的key。在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的key,unordered_set将相同哈希值的键值放在相同的桶中。unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。它的迭代器至少是前向迭代器。前向迭代器的特性。
684 0
|
12月前
|
编译器 C++ 容器
用一棵红黑树同时封装出map和set
再完成上面的代码后,我们的底层代码已经完成了,这时候已经是一个底层STL的红黑树了,已经已符合库里面的要求了,这时候我们是需要给他穿上对应的“衣服”,比如穿上set的“衣服”,那么这个穿上set的“衣服”,那么他就符合库里面set的要求了,同样map一样,这时候我们就需要实现set与map了。因此,上层容器map需要向底层红黑树提供一个仿函数,用于获取T当中的键值Key,这样一来,当底层红黑树当中需要比较两个结点的键值时,就可以通过这个仿函数来获取T当中的键值了。我们就可以使用仿函数了。
162 0