【算法复习】哈希|Map 与 Set 两个高频套路

一、 前端武器库:Object vs Map vs Set

在 JavaScript 中,实现哈希表有三种原生数据结构。在算法题中,请严格遵循以下选型直觉:

  1. Set (集合)

    • 核心特征:自带去重机制,只有键(或者说键值合一)。
    • 适用场景 :只关心元素存不存在、不需要记录额外信息、需要极速去重。
  2. Map (映射)

    • 核心特征 :真正的键值对映射,Key 可以是任意类型(即使是对象或数组),并且保留了插入顺序
    • 适用场景 :需要建立关联关系(如 数字 -> 频次当前值 -> 需要的配对值)。
  3. Object (普通对象)

    • 算法建议在现代前端算法刷题中,尽量少用 Object 作为哈希表 。因为对象的 Key 只能是字符串或 Symbol,且存在原型链污染的风险,API 也不如 Map 丰富。无脑首选 Map

二、 核心题型与通用套路

阵营 A:找配对与状态记录 (Map 的主场)

这类题目的标志性特征是:在遍历当前元素时,你需要回头去查找之前是否出现过某个与之相关的元素

通用模板:边存边查 :不要上来就用两次循环(先存一遍,再查一遍),最佳实践是在一次 for 循环中,先检查 Map 里有没有自己需要的目标,如果没有,就把自己存进 Map 留给后面的元素用。

对应练习题:

  • LeetCode 1. 两数之和 :哈希表开山之作。遍历数组,计算 target - 当前数字,去 Map 中查这个差值是否存在。存在则返回索引,不存在则将 当前数字 -> 当前索引 存入 Map。
  • LeetCode 347. 前 K 个高频元素 :进阶状态记录。以 数字 -> 出现次数 建立映射,后续配合排序或桶排序提取结果。

阵营 B:去重、交集与源头试探 (Set 的主场)

这类题目的核心在于利用 SetO(1) 查找能力,快速过滤无效数据或建立参照系。

通用模板:全量初始化后探测 :直接使用 new Set(nums) 将原数据转化为纯净的参照字典,随后对字典进行遍历试探。

对应练习题:

  • LeetCode 349. 两个数组的交集 :将数组 A 转为 Set,遍历数组 B,利用 Set.has() 过滤出共有的元素,最后再去重输出。
  • LeetCode 128. 最长连续序列 :高阶应用。把数组全塞进 Set,然后遍历 Set。破局点 :利用 !set.has(num - 1) 来判断当前元素是不是一段序列的"龙头",只有龙头才配进入 while 循环往后数,从而强行将时间复杂度锁定在 O(n)

相关推荐
手写码匠9 分钟前
手写 LLM 安全护栏:从内容审核到越狱防御的完整实现
人工智能·深度学习·算法·aigc
luj_176819 分钟前
草酸与烟酸对消化及糖代谢的影响解析
服务器·c语言·开发语言·经验分享·算法
青风9730 分钟前
16-ADAPTRACK:基于自适应阈值的多目标跟踪匹配算法
人工智能·算法·目标跟踪
汤姆yu1 小时前
macOS系统下Aider完整安装、配置与实战使用教程
大数据·人工智能·算法·macos·github·copilot
Sam09271 小时前
【AI 算法精讲 14】TF-IDF:词频与逆文档频率
人工智能·python·算法·ai
AI科技星1 小时前
拓扑生命系统确定性理论:基于32维流形的遗传密码起源与衰老动力学( 中英双语顶刊终稿·标准数学符号)
开发语言·网络·人工智能·算法·机器学习·乖乖数学·全域数学
编程圈子1 小时前
电机驱动开发学习18. SVPWM空间矢量调制算法详解与实现
驱动开发·学习·算法
大鱼>2 小时前
机器学习基础:从零理解核心概念与算法分类
算法·机器学习·分类
AI科技星2 小时前
基于32维Cayley_Dickson超复数的全域拓扑统一场论——反重力、真空自持供能、维度瞬移与星际宇宙脑秩序体系
人工智能·学习·算法·机器学习·数据挖掘
aichitang20242 小时前
数论变换(NTT)
c++·算法·fft·ntt