跳到正文
前端知识库

算法

用可复用的模型拆解数据结构和常见算法问题。

95 篇文档

并查集基础知识速览

高效维护“动态连通性”。(深入阅读:并查集 parent 数组)

并查集模板与复杂度

路径压缩后,均摊复杂度近似常数。(深入阅读:1. parent 数组)

并查集典型题:冗余连接与岛屿合并

当 union(u, v) 返回 false,说明这条边造成环。(深入阅读:1. 环检测)

并查集 高频追问 Q&A

A: 动态连通性、集合合并、环检测。(深入阅读:并查集基础知识速览、并查集模板与复杂度)

单调栈与单调队列基础知识速览

找“下一个更大/更小元素”、维护有序候选。(深入阅读:递减单调栈)

单调栈:下一个更大元素

维护“还没找到答案”的下标集合。(深入阅读:1. 递减栈)

单调队列:滑动窗口最大值

用下标单调队列在线性时间内维护每个固定窗口的最大值,并明确过期元素、重复值和队列头指针边界。

算法单调队列滑动窗口

单调栈与单调队列 高频追问 Q&A

A: 每个元素最多入栈一次、出栈一次。(深入阅读:单调栈:下一个更大元素)

动态规划基础知识速览

把“重复子问题”结果缓存起来,用空间换时间。(深入阅读:何时考虑动态规划)

线性 DP:爬楼梯、最小花费与打家劫舍

用明确的状态语义和滚动变量覆盖爬楼梯、最小花费爬楼梯、最大子数组和与打家劫舍,并处理零值、全负数和空间压缩边界。

算法动态规划线性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、孤儿节点、环和深度边界。

算法Map

树 高频追问 Q&A

A: 访问根节点时机不同:根前、根中、根后。(深入阅读:树的递归与迭代遍历)

数组去重与不重复随机递增数组

区分原始值、对象键和随机采样的契约,掌握稳定去重与无重复递增数组生成的实现、复杂度和随机性边界。

算法数组Set

双指针基础知识速览

用对撞、同向和边界指针拆解排序数组、子序列、匹配和回文题。

算法双指针数组

排序双指针:三数之和与顺序匹配

整理最接近三数之和、子序列、矩阵搜索、饼干匹配、回文和有序数组合并的可验证解法。

算法双指针贪心

贪心算法基础知识速览

每一步都做当前局部最优选择。(深入阅读:区间贪心的选择依据)

贪心:区间问题(活动选择与合并)

结束越早,给后续区间留出的空间越大。(深入阅读:1. 最多不重叠区间)

贪心:跳跃游戏与最少步数

维护当前最远可达位置 far。(深入阅读:1. Jump Game I)

贪心 高频追问 Q&A

A: 每一步选择当前最优,并期望得到全局最优。(深入阅读:贪心基础知识速览)

图基础知识速览

邻接表适合稀疏图,邻接矩阵适合稠密图。(深入阅读:邻接表建图)

拓扑排序:课程表问题

有向无环图(DAG)。(深入阅读:课程表建图与判环)

小镇法官:用入度与出度识别特殊节点

把信任关系转成度数差,在线性时间内寻找入度为 N-1 且出度为 0 的法官,并说明边界与证明。

算法有向图

图 高频追问 Q&A

A: 稀疏图用邻接表更省空间,稠密图用邻接矩阵查询边更快。(深入阅读:图基础知识速览)

异步调度:红绿灯循环与受限并发

把循环异步任务和 Promise 并发限制建模为可停止、可测试的调度器,明确启动时机、失败策略、结果顺序与资源清理。

算法Promise异步

栈与队列基础知识速览

后进先出(LIFO)。(深入阅读:括号匹配中的栈)

栈:括号匹配与表达式求值

遇左括号入栈,遇右括号弹栈并校验配对。(深入阅读:括号匹配实现)

栈与队列 高频追问 Q&A

A: DFS 需要“后进先出”回溯,BFS 需要“先进先出”按层推进。(深入阅读:深度优先搜索基础知识速览、广度优先搜索基础知识速览)

字典树基础知识速览

用前缀树组织字符串集合,理解关键词匹配、前缀查询和复杂度边界。

算法字典树Trie

Trie 关键词匹配与高亮

将百万级关键词高亮从重复遍历优化为前缀树扫描,并处理重叠匹配、HTML 安全和前端性能边界。

算法字典树Trie

字典树 高频追问 Q&A

用短答复习 Trie 的终止标记、复杂度、重叠关键词和 Aho-Corasick 边界。

算法字典树Trie

大数运算:字符串加法与乘法

从末位模拟竖式运算,处理进位、前导零、输入校验和 JavaScript 安全整数边界,并扩展到大数乘法。

算法字符串大数

最小生成树基础知识速览

在连通无向带权图中,用 n-1 条边连接所有点且总权值最小。(深入阅读:Kruskal 的停止条件)

Kruskal:并查集实现最小生成树

边按权重排序,依次尝试加入,若成环则跳过。(深入阅读:1. 复杂度)

Prim:堆优化实现最小生成树

从任意点出发,每次选择连接“已选点集合”和“未选点集合”的最小边。(深入阅读:1. 适用性)

最小生成树 高频追问 Q&A

A: MST 最小化总边权;最短路径树最小化源点到各点距离。(深入阅读:最小生成树基础知识速览)