力扣集合算法题分类解析
1. 哈希集合基础应用(Set)
类型特点:哈希集合用于快速判断元素是否存在、去重、统计出现次数等基础操作。常用于检查重复元素、交集、并集等问题。
| 难度 | 题目 | 核心思路简介 |
|---|---|---|
| 简单 | 217. 存在重复元素 | 使用 Set 判断是否有重复元素 |
| 简单 | 349. 两个数组的交集 | 用 Set 存储一个数组,遍历另一个数组判断是否存在 |
| 简单 | 202. 快乐数 | 用 Set 记录出现过的数,判断是否进入循环 |
| 简单 | 136. 只出现一次的数字 | 可以用 Set 但更优解是异或;Set 解法:出现两次则删除,最后剩下的即答案 |
| 简单 | 141. 环形链表 | 用 Set 存储已访问的节点,判断是否有环 |
2. 哈希映射进阶应用(Map)
类型特点:哈希映射用于存储键值对,常用于统计频率、记录索引、缓存计算结果等。是解决两数之和、字母异位词、LRU缓存等问题的核心工具。
| 难度 | 题目 | 核心思路简介 |
|---|---|---|
| 简单 | 1. 两数之和 | 用 Map 存储元素值和下标,遍历时查找 target - nums[i] |
| 简单 | 383. 赎金信 | 用 Map 统计 magazine 字符出现次数,检查 ransomNote 是否够用 |
| 中等 | 49. 字母异位词分组 | 将排序后的字符串作为 Map 的键,分组存储 |
| 中等 | 3. 无重复字符的最长子串 | 用 Map 存储字符最近出现的位置,滑动窗口时更新左边界 |
| 中等 | 146. LRU 缓存 | 哈希表 + 双向链表实现 O(1) 的 get 和 put |
| 中等 | 347. 前 K 个高频元素 | 先用 Map 统计频率,再用优先队列(堆)取 Top K |
| 困难 | 76. 最小覆盖子串 | 用两个 Map 或数组记录字符出现次数,滑动窗口寻找最小覆盖子串 |
| 中等 | 560. 和为 K 的子数组 | 前缀和 + Map 优化,Map 存储前缀和出现的次数 |
3. 并查集(Union-Find)
类型特点:并查集是一种树型数据结构,用于处理不相交集合的合并与查询问题。常用于连通分量、朋友圈、岛屿数量、最小生成树等场景 。
| 难度 | 题目 | 核心思路简介 |
|---|---|---|
| 中等 | 547. 省份数量 | 并查集统计连通分量个数,或 DFS/BFS 遍历 |
| 中等 | 200. 岛屿数量 | 可用 DFS/BFS,也可用并查集合并相邻的陆地 |
| 中等 | 684. 冗余连接 | 并查集,当发现两个节点已经连通时,当前边即为冗余边 |
| 中等 | 721. 账户合并 | 将邮箱作为节点,用并查集合并属于同一账户的邮箱 |
| 中等 | 990. 等式方程的可满足性 | 先将相等关系的变量合并,再检查不等关系是否矛盾 |
| 困难 | 128. 最长连续序列 | 可用并查集,但更常用 Set 进行 O(n) 解法 |
| 困难 | 765. 情侣牵手 | 并查集计算连通分量,最少交换次数 = 总情侣对数 - 连通分量数 |
4. 集合与其他算法的结合
类型特点:集合作为辅助数据结构,与其他算法(如 DFS、BFS、回溯、贪心)结合使用,用于去重、剪枝、记录状态等。
| 难度 | 题目 | 核心思路简介 |
|---|---|---|
| 中等 | 90. 子集 II | 回溯 + 排序 + 同层去重(可用 Set 但更优是用判断条件) |
| 中等 | 47. 全排列 II | 回溯 + 同层去重,可用 Set 记录已使用的元素值 |
| 中等 | 36. 有效的数独 | 用三个二维数组或 Set 记录行、列、九宫格中已出现的数字 |
| 困难 | 37. 解数独 | 回溯 + 用三个二维数组记录已填数字,快速判断合法性 |
| 中等 | 380. O(1) 时间插入、删除和获取随机元素 | 哈希表 + 动态数组,哈希表存储值到数组下标的映射 |
刷题建议
- 基础先行:从 217. 存在重复元素、349. 两个数组的交集 入手,掌握 Set 的基本用法。
- Map 进阶:练习 1. 两数之和、49. 字母异位词分组,理解键值对的妙用。
- 并查集入门:从 547. 省份数量 开始,理解并查集的 find 和 union 操作,然后挑战 684. 冗余连接、721. 账户合并。
- 综合应用:最后尝试 76. 最小覆盖子串 和 128. 最长连续序列,体会集合与其他算法的协同作用。