共 15 道 前端算法 方向的面试题,每题附完整答案与代码示例。点击右侧方框可标记掌握度。
时间复杂度 描述算法运行时间随输入规模 n 增长的趋势; 空间复杂度 描述额外内存随 n 增长的趋势。O() 只保留最高阶项并忽略常数系数。 分析步骤: 1. 找出随输入规模变化最频繁的操作(基本语句…
思路 :用哈希表存「值 → 下标」,遍历时查互补值是否存在,把 O(n^2) 降到 O(n)。 - 时间 O(n),空间 O(n) - 只遍历一次,边走边查;找到了立即返回 - 变体:三数之和用排序 …
迭代 :三指针(prev / cur / next)逐个反转指向。 递归 :先反转后续,再让后一个节点指向自己。 - 时间 O(n),空间:迭代 O(1),递归 O(n)(调用栈) - 易错点:反转前…
思路 :左括号入栈,遇右括号弹栈检查是否匹配;最后栈须为空。 - 时间 O(n),空间 O(n) - 常见变体:最长有效括号(用栈存下标)、删除最少字符使括号有效
递归 (结构清晰): 迭代 (用栈模拟):以前序为例,先压右再压左,保证出栈顺序为根→左→右。 - 递归空间 O(h)(h 为树高),最坏 O(n) - 中序遍历 + BST 可得升序序列,常用于「验…
思路 :广度优先(BFS),用队列「逐层」处理,每层先记录长度再统一出队。 - 时间 O(n),空间 O(n)(队列最坏存满一层) - 变体:之字形层序(偶数层反转)、求树的最大深度
思想 :分治法。选「基准 pivot」,把小于基准的放左、大于的放右,再递归处理左右两半。 - 平均 O(n log n),最坏(已排序 + 取末位 pivot)O(n^2) - 优化:随机选 piv…
思想 :分治 + 合并。先递归拆到单元素,再「两路有序合并」。 对比 快排 归并 --- --- --- 平均 O(n log n) O(n log n) 最坏 O(n^2) O(n log n)(稳…
思想 :每次取中点,比较后丢弃一半区间,直到命中或区间为空。 - 时间 O(log n),空间 O(1) - 边界易错:lo/hi 更新与循环条件要配套(闭区间用 <=;左闭右开用 <)
思路 :维护一个窗口 [left, right],用哈希/集合记录窗口内字符;遇重复就右移 left 直到无重复。 - 时间 O(n)(每个字符进出窗口各一次),空间 O(min(n, m))(m 为…
思路 :左右指针夹逼。面积 = 短边 × 距离。每次移动较短的那一端(移动长边不可能增大面积)。 - 时间 O(n),空间 O(1) - 经典贪心 + 双指针:证明「移动短板才可能变优」是关键
dp[i] = dp[i-1] + dp[i-2](第 i 阶要么从 i-1 跨 1 步,要么从 i-2 跨 2 步),本质斐波那契。 - 时间 O(n),空间 O(1) - DP 五步:定义状态 →…
法一 DP :dp[i] = 以 nums[i] 结尾的 LIS 长度,O(n^2)。 法二 贪心 + 二分 (最优):维护「tails」数组存各长度递增子序列的最小结尾,用二分插入。 - 时间 O(…
- 时间 O(n · n!),空间 O(n) - 回溯三要素:路径、选择列表、结束条件;核心是「做选择 → 递归 → 撤销选择」 - 变体:含重复元素需先排序并「同层去重」
DFS + 三色标记 :白(未访问)/ 灰(递归中)/ 黑(已完成)。遇到灰节点即存在环。 - 时间 O(V + E) - 应用:课程表(207)、依赖构建顺序、任务调度 - Kahn 算法(入度+B…