算法
用可复用的模型拆解数据结构和常见算法问题。
95 篇文档
并查集基础知识速览
高效维护“动态连通性”。(深入阅读:并查集 parent 数组)
并查集模板与复杂度
路径压缩后,均摊复杂度近似常数。(深入阅读:1. parent 数组)
并查集典型题:冗余连接与岛屿合并
当 union(u, v) 返回 false,说明这条边造成环。(深入阅读:1. 环检测)
并查集 高频追问 Q&A
A: 动态连通性、集合合并、环检测。(深入阅读:并查集基础知识速览、并查集模板与复杂度)
单调栈与单调队列基础知识速览
找“下一个更大/更小元素”、维护有序候选。(深入阅读:递减单调栈)
单调栈:下一个更大元素
维护“还没找到答案”的下标集合。(深入阅读:1. 递减栈)
单调队列:滑动窗口最大值
用下标单调队列在线性时间内维护每个固定窗口的最大值,并明确过期元素、重复值和队列头指针边界。
单调栈与单调队列 高频追问 Q&A
A: 每个元素最多入栈一次、出栈一次。(深入阅读:单调栈:下一个更大元素)
动态规划基础知识速览
把“重复子问题”结果缓存起来,用空间换时间。(深入阅读:何时考虑动态规划)
线性 DP:爬楼梯、最小花费与打家劫舍
用明确的状态语义和滚动变量覆盖爬楼梯、最小花费爬楼梯、最大子数组和与打家劫舍,并处理零值、全负数和空间压缩边界。
背包 DP:0-1 与完全背包
每件物品用 1 次 vs 可用无限次。(深入阅读:1. 状态定义)
子序列 DP:LIS 与 LCS
LIS 单序列严格递增;LCS 双序列最长公共子序列。(深入阅读:1. LIS(O(n^2)))
状态机 DP:股票买卖问题
把“持有/不持有”等状态拆开建模。(深入阅读:1. 基础状态)
动态规划 高频追问 Q&A
A: 出现“最优解 + 重复子问题 + 子问题有重叠”时优先考虑 DP。(深入阅读:动态规划基础知识速览、何时考虑动态规划)
动态规划方法论与面试进阶
从状态、转移和遍历顺序深入到正确性证明、经典模型、路径恢复、空间优化与面试表达。
堆与优先队列基础知识速览
完全二叉树 + 父节点优先级高于子节点。(深入阅读:小顶堆维护 TopK)
TopK:小顶堆实战
堆顶始终是当前 TopK 中最小值,便于比较替换。(深入阅读:1. 热点统计)
堆与优先队列 高频追问 Q&A
A: 堆顶保存当前 TopK 里最小值,新元素只需与堆顶比较即可决定替换。(深入阅读:TopK 小顶堆实战)
二分查找基础知识速览
数据有序 + 目标具备单调性。(深入阅读:答案二分的单调性)
查找边界:第一个与最后一个位置
左边界在 nums[mid] >= target 时收缩右侧;右边界反之。(深入阅读:1. 左边界)
答案二分:最小可行值模型
而是在“答案空间”上二分。(深入阅读:1. 最小可行值)
二分查找 高频追问 Q&A
A: 有序性或可构造单调性。(深入阅读:二分查找基础知识速览)
复杂度与算法基础速览
关注输入规模增长时操作次数趋势,而不是具体常数。(深入阅读:循环与递归复杂度)
复杂度分析方法与陷阱
串行相加、嵌套相乘、递归看递推式。(深入阅读:1. 递归复杂度)
数据结构选型速记
先看操作类型(查找/插入/删除/区间),再看数据规模和是否有序。(深入阅读:复杂度分析与方案选型)
复杂度与基础 高频追问 Q&A
A: 不是。复杂度描述增长趋势,实际耗时还受常数、语言和硬件影响。(深入阅读:复杂度分析方法与陷阱)
广度优先搜索基础知识速览
按层推进,先访问距离起点更近的节点。(深入阅读:无权图最短路径)
BFS:最短路径(无权图与网格)
无权图每条边代价相同,按层扩展首次到达即最短。(深入阅读:1. 网格 BFS)
BFS:层序遍历(树与图)
每轮先记录当前队列长度,保证同层一起处理。(深入阅读:1. 树层序)
广度优先搜索 高频追问 Q&A
A: 每层代表步数 +1,首次到达目标即最短路径。(深入阅读:无权图与网格最短路径)
哈希表基础知识速览
平均 O(1) 查询/插入,常用于“以空间换时间”。(深入阅读:复杂度分析口径)
哈希表:频次统计(TopK 与众数)
先计数,再按题意排序/堆选/桶分组。(深入阅读:1. 计数)
哈希判重:两数之和与异位词
遍历当前值 x 时查 target-x 是否已出现。(深入阅读:1. 两数之和)
Set 与 Map 解题套路
去重、判重、维护访问状态。(深入阅读:1. 两数之和)
哈希表 高频追问 Q&A
A: 平均情况下桶定位与查找接近常数时间。(深入阅读:哈希表基础知识速览)
滑动窗口基础知识速览
连续子数组/子串问题。(深入阅读:固定窗口)
固定窗口:最大平均值与子数组和
从 O(nk) 到 O(n),每次仅增一减一。(深入阅读:1. 窗口和)
可变窗口:最长无重复子串
当约束被破坏时收缩左边界直到恢复。(深入阅读:1. 维护频次)
字符覆盖:异位词与最小覆盖子串
用频次表和有效计数解决固定窗口异位词、可变窗口最小覆盖及其边界问题。
滑动窗口 高频追问 Q&A
A: 固定窗口长度不变;可变窗口根据约束动态收缩。(深入阅读:固定窗口题型、可变窗口题型)
回溯基础知识速览
系统地枚举解空间,遇到不合法分支就回退。(深入阅读:组合与子集模板)
回溯:组合与子集标准模板
组合看集合不看顺序;排列看顺序。(深入阅读:1. 组合)
回溯:排列与去重(全排列)
使用 used 数组标记元素是否已在当前路径。(深入阅读:1. 状态)
回溯:N 皇后(约束搜索与剪枝)
列冲突、主对角线冲突、副对角线冲突立即剪枝。(深入阅读:1. 递归层级)
回溯 高频追问 Q&A
A: 回溯是带剪枝的系统枚举,能提前砍掉无效分支。(深入阅读:回溯基础知识速览)
链表基础知识速览
链表插入删除快,随机访问慢;数组反之。(深入阅读:链表与数组的真实选型)
双指针:快慢指针套路
快指针每次多走一步,若有环必相遇。(深入阅读:1. 找中点)
反转链表:迭代与递归
prev、cur、next 是标准写法。(深入阅读:1. 迭代优势)
链表环:检测与入口查找
Floyd 判圈法:快慢指针是否相遇。(深入阅读:1. 数学关系)
有序链表合并与分治
使用 dummy + tail 指针构建新链表。(深入阅读:1. 两链表合并)
链表加法:进位与方向
处理逆序和正序数字链表的逐位相加,明确进位、节点身份与输入修改边界。
链表 高频追问 Q&A
A: 统一头节点被删/改的边界,减少分支判断。(深入阅读:链表基础:哨兵节点)
链表方法论与面试进阶
从哨兵、反转和快慢指针深入到循环不变量、区间操作、环入口、相交链表与工程数据结构。
算法面试真题补充:数据结构选型与解题模板
汇总多份前端面试 PDF 中可复核的算法题、数据结构选型、复杂度和边界追问,并链接到各专题的完整实现。
排序基础知识速览
冒泡/选择/插入 O(n^2),快排/归并/堆排 O(n log n)。(深入阅读:快排与归并的复杂度)
快排与归并排序对比
平均 O(n log n),原地排序,最坏 O(n^2)。(深入阅读:1. 稳定性敏感)
基础排序:冒泡、选择、插入
三者平均都为 O(n^2),适合小规模数据或教学场景。(深入阅读:1. 小规模几乎有序数组)
堆排与希尔排序速览
时间复杂度:O(n log n)。
排序 高频追问 Q&A
A: 每次分区极不均衡(如总选到最大/最小)会退化为链式递归。(深入阅读:快排与归并排序对比)
前缀和基础知识速览
把区间和查询从 O(n) 降到 O(1)。(深入阅读:一维区间和查询)
一维前缀和:区间和查询
预处理一次,查询时只做一次减法。(深入阅读:1. 构建)
前缀和 + 哈希:子数组和为 K
若 pre[i] - pre[j] = k,则 j..i-1 区间和为 k。(深入阅读:1. 初始化)
前缀和 高频追问 Q&A
A: 把多次区间和查询从 O(n) 降为 O(1)。(深入阅读:前缀和基础知识速览、一维前缀和)
深度优先搜索基础知识速览
沿一条路径尽可能深入,走不动再回溯。(深入阅读:图的 DFS 连通性)
DFS:图的连通性与遍历
遍历所有节点,未访问节点发起一次 DFS,计数加一。(深入阅读:1. 邻接表建图)
DFS 回溯:排列、组合、子集
回溯强调“做选择 -> 递归 -> 撤销选择”。(深入阅读:1. 路径与选择列表)
深度优先搜索 高频追问 Q&A
A: DFS 深入后回溯,BFS 按层扩展。(深入阅读:深度优先搜索基础知识速览、广度优先搜索基础知识速览)
树基础知识速览
前序、中序、后序。(深入阅读:树的递归与迭代遍历、扁平数据与树结构互转)
树遍历模板:递归与迭代
代码短但深树可能爆栈。(深入阅读:递归遍历模板)
二叉搜索树:查找插入删除
无子、一个子、两个子(找后继替换)。(深入阅读:BST 查找与删除)
扁平数据与树结构互转
用索引和显式遍历实现扁平节点与树的双向转换,并处理重复 ID、孤儿节点、环和深度边界。
树 高频追问 Q&A
A: 访问根节点时机不同:根前、根中、根后。(深入阅读:树的递归与迭代遍历)
数组去重与不重复随机递增数组
区分原始值、对象键和随机采样的契约,掌握稳定去重与无重复递增数组生成的实现、复杂度和随机性边界。
双指针基础知识速览
用对撞、同向和边界指针拆解排序数组、子序列、匹配和回文题。
排序双指针:三数之和与顺序匹配
整理最接近三数之和、子序列、矩阵搜索、饼干匹配、回文和有序数组合并的可验证解法。
贪心算法基础知识速览
每一步都做当前局部最优选择。(深入阅读:区间贪心的选择依据)
贪心:区间问题(活动选择与合并)
结束越早,给后续区间留出的空间越大。(深入阅读:1. 最多不重叠区间)
贪心:跳跃游戏与最少步数
维护当前最远可达位置 far。(深入阅读:1. Jump Game I)
贪心 高频追问 Q&A
A: 每一步选择当前最优,并期望得到全局最优。(深入阅读:贪心基础知识速览)
图基础知识速览
邻接表适合稀疏图,邻接矩阵适合稠密图。(深入阅读:邻接表建图)
拓扑排序:课程表问题
有向无环图(DAG)。(深入阅读:课程表建图与判环)
小镇法官:用入度与出度识别特殊节点
把信任关系转成度数差,在线性时间内寻找入度为 N-1 且出度为 0 的法官,并说明边界与证明。
图 高频追问 Q&A
A: 稀疏图用邻接表更省空间,稠密图用邻接矩阵查询边更快。(深入阅读:图基础知识速览)
异步调度:红绿灯循环与受限并发
把循环异步任务和 Promise 并发限制建模为可停止、可测试的调度器,明确启动时机、失败策略、结果顺序与资源清理。
栈与队列基础知识速览
后进先出(LIFO)。(深入阅读:括号匹配中的栈)
栈:括号匹配与表达式求值
遇左括号入栈,遇右括号弹栈并校验配对。(深入阅读:括号匹配实现)
栈与队列 高频追问 Q&A
A: DFS 需要“后进先出”回溯,BFS 需要“先进先出”按层推进。(深入阅读:深度优先搜索基础知识速览、广度优先搜索基础知识速览)
字典树基础知识速览
用前缀树组织字符串集合,理解关键词匹配、前缀查询和复杂度边界。
Trie 关键词匹配与高亮
将百万级关键词高亮从重复遍历优化为前缀树扫描,并处理重叠匹配、HTML 安全和前端性能边界。
字典树 高频追问 Q&A
用短答复习 Trie 的终止标记、复杂度、重叠关键词和 Aho-Corasick 边界。
大数运算:字符串加法与乘法
从末位模拟竖式运算,处理进位、前导零、输入校验和 JavaScript 安全整数边界,并扩展到大数乘法。
最小生成树基础知识速览
在连通无向带权图中,用 n-1 条边连接所有点且总权值最小。(深入阅读:Kruskal 的停止条件)
Kruskal:并查集实现最小生成树
边按权重排序,依次尝试加入,若成环则跳过。(深入阅读:1. 复杂度)
Prim:堆优化实现最小生成树
从任意点出发,每次选择连接“已选点集合”和“未选点集合”的最小边。(深入阅读:1. 适用性)
最小生成树 高频追问 Q&A
A: MST 最小化总边权;最短路径树最小化源点到各点距离。(深入阅读:最小生成树基础知识速览)