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

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

相关文章
|
3月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
61 3
|
29天前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
60 18
你对Collection中Set、List、Map理解?
|
22天前
|
存储 缓存 安全
只会“有序无序”?面试官嫌弃的List、Set、Map回答!
小米,一位热衷于技术分享的程序员,通过与朋友小林的对话,详细解析了Java面试中常见的List、Set、Map三者之间的区别,不仅涵盖了它们的基本特性,还深入探讨了各自的实现原理及应用场景,帮助面试者更好地准备相关问题。
55 20
|
9天前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
2月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
35 3
【C++】map、set基本用法
|
2月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
26 5
|
2月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
3月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
55 4
|
3月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
3月前
|
算法
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(二) ----- 力扣/牛客