Skip to content

数据结构和算法

大厂前端面试,算法题通常不会考得特别偏,但会反复考察相同套路。

这份题单的目标不是“题海战术”,而是把前端面试最常出现的套路一次性梳理清楚,面试前可以按频率快速复习。

TIP

  1. 这份清单按 2026-04-09 可见的 LeetCode 「面试经典 150 题」整理。
  2. 对前端同学来说,不需要平均发力,应该优先刷高频分类,再补全长尾题。
  3. 如果时间不够,先刷 P0 必刷,再刷 P1 高频,最后再补 P2 扩展

TIP

如有疑问,可免费 加群 讨论咨询,也可参与 1v1 面试咨询服务,专业、系统、高效、全流程准备前端面试。

算法基础 Basic

磨刀不误砍柴工。刷题之前,先把数据结构、复杂度、常见解题套路补齐。

前端常见的数据结构有哪些?有什么应用场景?

数组 / 字符串

应用场景:

  • 列表渲染、批量处理、表单数据处理
  • URL / query 解析
  • 文本搜索、编辑器、日志处理

基础算法:

  • 排序、去重、二分查找
  • 双指针、滑动窗口、前缀和

链表

应用场景:

  • React Fiber
  • LRU 缓存
  • 任务调度、撤销重做

基础算法:

  • 遍历、反转
  • 快慢指针
  • 虚拟头结点

应用场景:

  • 括号匹配
  • 表达式求值
  • 浏览器前进后退、撤销重做

基础算法:

  • push
  • pop
  • 单调栈

队列

应用场景:

  • Event Loop
  • 消息队列
  • BFS 层序遍历

基础算法:

  • enqueue
  • dequeue

树 / 二叉树

应用场景:

  • DOM 树、VDOM
  • 菜单树、权限树、评论树

基础算法:

  • DFS
  • BFS
  • 前序 / 中序 / 后序遍历

应用场景:

  • TopK
  • 优先级任务调度
  • 实时中位数

基础算法:

  • 堆化
  • 堆排序
  • 优先队列

应用场景:

  • 流程图、关系图
  • 依赖分析
  • 课程 / 任务拓扑排序

基础算法:

  • DFS
  • BFS
  • 最短路径
  • 拓扑排序

什么是时间复杂度?

算法的时间复杂度,定性(数量级)地描述算法运行时间,用 O 表示。

常见时间复杂度:

  • O(1) 常数级
  • O(n) 线性
  • O(logn) 二分
  • O(nlogn) 排序 / 分治常见
  • O(n^2) 双层循环
  • O(n^3) 通常不可接受

什么是空间复杂度?

空间复杂度描述算法额外使用的内存规模。面试里经常会同时问:

  • 能不能从 O(n) 优化到 O(1) 额外空间?
  • 能不能原地修改?
  • 能不能避免递归栈?

前端面试怎么刷算法最有效?

P0 必刷分类

这几类是前端面试最常见的,出现频率明显高于其他分类:

  • 数组 / 字符串
  • 哈希表
  • 双指针
  • 滑动窗口
  • 链表
  • 二叉树 DFS / BFS
  • 二分查找
  • 一维动态规划

P1 高频分类

  • 矩阵
  • 区间合并
  • 堆 / TopK
  • 回溯
  • 多维动态规划

P2 扩展分类

  • Trie
  • 位运算
  • 数学
  • 分治
  • Kadane

面试前冲刺顺序

  1. 先把 数组 + 哈希 + 双指针 + 滑动窗口 刷透。
  2. 再刷 链表 + 栈 + 二叉树 + 二分
  3. 最后补 DP + 图 + 堆 + 回溯

前端高频必刷 50 题

如果你只剩 1 到 2 周,建议至少把下面这些题刷熟。

数组 / 哈希 / 双指针

  • 1 Two Sum(两数之和): 题目 | 解答
  • 121 Best Time to Buy and Sell Stock(买卖股票的最佳时机): 题目 | 解答
  • 122 Best Time to Buy and Sell Stock II(买卖股票的最佳时机 II): 题目 | 解答
  • 55 Jump Game(跳跃游戏): 题目 | 解答
  • 45 Jump Game II(跳跃游戏 II): 题目 | 解答
  • 238 Product of Array Except Self(除自身以外数组的乘积): 题目 | 解答
  • 134 Gas Station(加油站): 题目 | 解答
  • 42 Trapping Rain Water(接雨水): 题目 | 解答
  • 125 Valid Palindrome(验证回文串): 题目 | 解答
  • 167 Two Sum II - Input Array Is Sorted(两数之和 II:输入有序数组): 题目 | 解答
  • 11 Container With Most Water(盛最多水的容器): 题目 | 解答
  • 15 3Sum(三数之和): 题目 | 解答
  • 202 Happy Number(快乐数): 题目 | 解答
  • 128 Longest Consecutive Sequence(最长连续序列): 题目 | 解答

滑动窗口 / 字符串

  • 3 Longest Substring Without Repeating Characters(无重复字符的最长子串): 题目 | 解答
  • 76 Minimum Window Substring(最小覆盖子串): 题目 | 解答
  • 209 Minimum Size Subarray Sum(长度最小的子数组): 题目 | 解答
  • 49 Group Anagrams(字母异位词分组): 题目 | 解答
  • 14 Longest Common Prefix(最长公共前缀): 题目 | 解答
  • 151 Reverse Words in a String(反转字符串中的单词): 题目 | 解答
  • 28 Find the Index of the First Occurrence in a String(找出字符串中第一个匹配项的下标): 题目 | 解答

栈 / 链表

  • 20 Valid Parentheses(有效的括号): 题目 | 解答
  • 71 Simplify Path(简化路径): 题目 | 解答
  • 155 Min Stack(最小栈): 题目 | 解答
  • 150 Evaluate Reverse Polish Notation(逆波兰表达式求值): 题目 | 解答
  • 141 Linked List Cycle(环形链表): 题目 | 解答
  • 2 Add Two Numbers(两数相加): 题目 | 解答
  • 21 Merge Two Sorted Lists(合并两个有序链表): 题目 | 解答
  • 206 Reverse Linked List(反转链表): 题目 | 解答
  • 19 Remove Nth Node From End of List(删除链表的倒数第 N 个结点): 题目 | 解答
  • 146 LRU Cache(LRU 缓存): 题目 | 解答

二叉树 / 图

  • 104 Maximum Depth of Binary Tree(二叉树的最大深度): 题目 | 解答
  • 226 Invert Binary Tree(翻转二叉树): 题目 | 解答
  • 101 Symmetric Tree(对称二叉树): 题目 | 解答
  • 102 Binary Tree Level Order Traversal(二叉树的层序遍历): 题目 | 解答
  • 98 Validate Binary Search Tree(验证二叉搜索树): 题目 | 解答
  • 230 Kth Smallest Element in a BST(二叉搜索树中第 K 小的元素): 题目 | 解答
  • 236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先): 题目 | 解答
  • 200 Number of Islands(岛屿数量): 题目 | 解答
  • 133 Clone Graph(克隆图): 题目 | 解答
  • 207 Course Schedule(课程表): 题目 | 解答
  • 127 Word Ladder(单词接龙): 题目 | 解答

二分 / 堆 / DP

  • 35 Search Insert Position(搜索插入位置): 题目 | 解答
  • 33 Search in Rotated Sorted Array(搜索旋转排序数组): 题目 | 解答
  • 153 Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值): 题目 | 解答
  • 215 Kth Largest Element in an Array(数组中的第 K 个最大元素): 题目 | 解答
  • 70 Climbing Stairs(爬楼梯): 题目 | 解答
  • 198 House Robber(打家劫舍): 题目 | 解答
  • 139 Word Break(单词拆分): 题目 | 解答
  • 322 Coin Change(零钱兑换): 题目 | 解答
  • 300 Longest Increasing Subsequence(最长递增子序列): 题目 | 解答
  • 5 Longest Palindromic Substring(最长回文子串): 题目 | 解答

面试经典 Top 150 全量题单

下面按官方分类整理成适合前端复习的结构。建议复习时按分类批量刷,不要随机跳题。

分类跳转

1. 数组 / 字符串 Array and String 24 题

  • 88 Merge Sorted Array(合并两个有序数组): 题目 | 解答
  • 27 Remove Element(移除元素): 题目 | 解答
  • 26 Remove Duplicates from Sorted Array(删除有序数组中的重复项): 题目 | 解答
  • 80 Remove Duplicates from Sorted Array II(删除有序数组中的重复项 II): 题目 | 解答
  • 169 Majority Element(多数元素): 题目 | 解答
  • 189 Rotate Array(轮转数组): 题目 | 解答
  • 121 Best Time to Buy and Sell Stock(买卖股票的最佳时机): 题目 | 解答
  • 122 Best Time to Buy and Sell Stock II(买卖股票的最佳时机 II): 题目 | 解答
  • 55 Jump Game(跳跃游戏): 题目 | 解答
  • 45 Jump Game II(跳跃游戏 II): 题目 | 解答
  • 274 H-Index(H 指数): 题目 | 解答
  • 380 Insert Delete Get Random O(1)(O(1) 时间插入、删除和获取随机元素): 题目 | 解答
  • 238 Product of Array Except Self(除自身以外数组的乘积): 题目 | 解答
  • 134 Gas Station(加油站): 题目 | 解答
  • 135 Candy(分发糖果): 题目 | 解答
  • 42 Trapping Rain Water(接雨水): 题目 | 解答
  • 13 Roman to Integer(罗马数字转整数): 题目 | 解答
  • 12 Integer to Roman(整数转罗马数字): 题目 | 解答
  • 58 Length of Last Word(最后一个单词的长度): 题目 | 解答
  • 14 Longest Common Prefix(最长公共前缀): 题目 | 解答
  • 151 Reverse Words in a String(反转字符串中的单词): 题目 | 解答
  • 6 Zigzag Conversion(Z 字形变换): 题目 | 解答
  • 28 Find the Index of the First Occurrence in a String(找出字符串中第一个匹配项的下标): 题目 | 解答
  • 68 Text Justification(文本左右对齐): 题目 | 解答

2. 双指针 Two Pointers 6 题

  • 125 Valid Palindrome(验证回文串): 题目 | 解答
  • 392 Is Subsequence(判断子序列): 题目 | 解答
  • 11 Container With Most Water(盛最多水的容器): 题目 | 解答
  • 167 Two Sum II - Input Array Is Sorted(两数之和 II:输入有序数组): 题目 | 解答
  • 15 3Sum(三数之和): 题目 | 解答
  • 202 Happy Number(快乐数): 题目 | 解答

3. 滑动窗口 Sliding Window 4 题

  • 3 Longest Substring Without Repeating Characters(无重复字符的最长子串): 题目 | 解答
  • 76 Minimum Window Substring(最小覆盖子串): 题目 | 解答
  • 30 Substring with Concatenation of All Words(串联所有单词的子串): 题目 | 解答
  • 209 Minimum Size Subarray Sum(长度最小的子数组): 题目 | 解答

4. 矩阵 Matrix 5 题

5. 哈希表 Hashmap 8 题

6. 区间 Intervals 4 题

  • 228 Summary Ranges(汇总区间): 题目 | 解答
  • 56 Merge Intervals(合并区间): 题目 | 解答
  • 57 Insert Interval(插入区间): 题目 | 解答
  • 452 Minimum Number of Arrows to Burst Balloons(用最少数量的箭引爆气球): 题目 | 解答

7. 栈 Stack 5 题

8. 链表 Linked List 11 题

  • 141 Linked List Cycle(环形链表): 题目 | 解答
  • 2 Add Two Numbers(两数相加): 题目 | 解答
  • 21 Merge Two Sorted Lists(合并两个有序链表): 题目 | 解答
  • 138 Copy List with Random Pointer(随机链表的复制): 题目 | 解答
  • 206 Reverse Linked List(反转链表): 题目 | 解答
  • 25 Reverse Nodes in k-Group(K 个一组翻转链表): 题目 | 解答
  • 19 Remove Nth Node From End of List(删除链表的倒数第 N 个结点): 题目 | 解答
  • 82 Remove Duplicates from Sorted List II(删除排序链表中的重复元素 II): 题目 | 解答
  • 61 Rotate List(旋转链表): 题目 | 解答
  • 86 Partition List(分隔链表): 题目 | 解答
  • 146 LRU Cache(LRU 缓存): 题目 | 解答

9. 二叉树 Binary Tree - General 14 题

  • 104 Maximum Depth of Binary Tree(二叉树的最大深度): 题目 | 解答
  • 100 Same Tree(相同的树): 题目 | 解答
  • 226 Invert Binary Tree(翻转二叉树): 题目 | 解答
  • 101 Symmetric Tree(对称二叉树): 题目 | 解答
  • 105 Construct Binary Tree from Preorder and Inorder Traversal(从前序与中序遍历序列构造二叉树): 题目 | 解答
  • 106 Construct Binary Tree from Inorder and Postorder Traversal(从中序与后序遍历序列构造二叉树): 题目 | 解答
  • 117 Populating Next Right Pointers in Each Node II(填充每个节点的下一个右侧节点指针 II): 题目 | 解答
  • 114 Flatten Binary Tree to Linked List(二叉树展开为链表): 题目 | 解答
  • 112 Path Sum(路径总和): 题目 | 解答
  • 129 Sum Root to Leaf Numbers(求根节点到叶节点数字之和): 题目 | 解答
  • 124 Binary Tree Maximum Path Sum(二叉树中的最大路径和): 题目 | 解答
  • 173 Binary Search Tree Iterator(二叉搜索树迭代器): 题目 | 解答
  • 222 Count Complete Tree Nodes(完全二叉树的节点个数): 题目 | 解答
  • 236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先): 题目 | 解答

10. 二叉树 Binary Tree - BFS 7 题

  • 199 Binary Tree Right Side View(二叉树的右视图): 题目 | 解答
  • 637 Average of Levels in Binary Tree(二叉树的层平均值): 题目 | 解答
  • 102 Binary Tree Level Order Traversal(二叉树的层序遍历): 题目 | 解答
  • 103 Binary Tree Zigzag Level Order Traversal(二叉树的锯齿形层序遍历): 题目 | 解答
  • 530 Minimum Absolute Difference in BST(二叉搜索树的最小绝对差): 题目 | 解答
  • 230 Kth Smallest Element in a BST(二叉搜索树中第 K 小的元素): 题目 | 解答
  • 98 Validate Binary Search Tree(验证二叉搜索树): 题目 | 解答

11. 图 Graph - General 6 题

12. 图 Graph - BFS 3 题

13. Trie 3 题

  • 208 Implement Trie (Prefix Tree)(实现 Trie 前缀树): 题目 | 解答
  • 211 Design Add and Search Words Data Structure(添加与搜索单词的数据结构设计): 题目 | 解答
  • 212 Word Search II(单词搜索 II): 题目 | 解答

14. 回溯 Backtracking 7 题

15. 分治 Divide and Conquer 4 题

  • 108 Convert Sorted Array to Binary Search Tree(将有序数组转换为二叉搜索树): 题目 | 解答
  • 148 Sort List(排序链表): 题目 | 解答
  • 427 Construct Quad Tree(建立四叉树): 题目 | 解答
  • 23 Merge k Sorted Lists(合并 K 个升序链表): 题目 | 解答

16. Kadane 2 题

  • 53 Maximum Subarray(最大子数组和): 题目 | 解答
  • 918 Maximum Sum Circular Subarray(环形子数组的最大和): 题目 | 解答

17. 二分查找 Binary Search 7 题

  • 35 Search Insert Position(搜索插入位置): 题目 | 解答
  • 74 Search a 2D Matrix(搜索二维矩阵): 题目 | 解答
  • 162 Find Peak Element(寻找峰值): 题目 | 解答
  • 33 Search in Rotated Sorted Array(搜索旋转排序数组): 题目 | 解答
  • 34 Find First and Last Position of Element in Sorted Array(在排序数组中查找元素的第一个和最后一个位置): 题目 | 解答
  • 153 Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值): 题目 | 解答
  • 4 Median of Two Sorted Arrays(寻找两个正序数组的中位数): 题目 | 解答

18. 堆 Heap 4 题

  • 215 Kth Largest Element in an Array(数组中的第 K 个最大元素): 题目 | 解答
  • 502 IPO(IPO 项目选择): 题目 | 解答
  • 373 Find K Pairs with Smallest Sums(查找和最小的 K 对数字): 题目 | 解答
  • 295 Find Median from Data Stream(数据流的中位数): 题目 | 解答

19. 位运算 Bit Manipulation 6 题

  • 67 Add Binary(二进制求和): 题目 | 解答
  • 190 Reverse Bits(颠倒二进制位): 题目 | 解答
  • 191 Number of 1 Bits(位 1 的个数): 题目 | 解答
  • 136 Single Number(只出现一次的数字): 题目 | 解答
  • 137 Single Number II(只出现一次的数字 II): 题目 | 解答
  • 201 Bitwise AND of Numbers Range(数字范围按位与): 题目 | 解答

20. 数学 Math 6 题

21. 一维动态规划 1D Dynamic Programming 5 题

22. 多维动态规划 Multidimensional Dynamic Programming 9 题

  • 120 Triangle(三角形最小路径和): 题目 | 解答
  • 64 Minimum Path Sum(最小路径和): 题目 | 解答
  • 63 Unique Paths II(不同路径 II): 题目 | 解答
  • 5 Longest Palindromic Substring(最长回文子串): 题目 | 解答
  • 97 Interleaving String(交错字符串): 题目 | 解答
  • 72 Edit Distance(编辑距离): 题目 | 解答
  • 123 Best Time to Buy and Sell Stock III(买卖股票的最佳时机 III): 题目 | 解答
  • 188 Best Time to Buy and Sell Stock IV(买卖股票的最佳时机 IV): 题目 | 解答
  • 221 Maximal Square(最大正方形): 题目 | 解答

高频分类速查

1. 数组 / 哈希

重点套路:

  • 原地修改
  • 哈希计数
  • 前缀积 / 前缀和
  • 贪心

必会题:

  • 1 Two Sum(两数之和): 题目 | 解答
  • 169 Majority Element(多数元素): 题目 | 解答
  • 238 Product of Array Except Self(除自身以外数组的乘积): 题目 | 解答
  • 128 Longest Consecutive Sequence(最长连续序列): 题目 | 解答
  • 134 Gas Station(加油站): 题目 | 解答

2. 双指针 / 滑动窗口

重点套路:

  • 左右指针逼近
  • 快慢指针
  • 维护窗口合法性

必会题:

  • 11 Container With Most Water(盛最多水的容器): 题目 | 解答
  • 15 3Sum(三数之和): 题目 | 解答
  • 3 Longest Substring Without Repeating Characters(无重复字符的最长子串): 题目 | 解答
  • 76 Minimum Window Substring(最小覆盖子串): 题目 | 解答
  • 209 Minimum Size Subarray Sum(长度最小的子数组): 题目 | 解答

3. 链表

重点套路:

  • 虚拟头结点
  • 快慢指针
  • 原地反转
  • 多指针重连

必会题:

  • 21 Merge Two Sorted Lists(合并两个有序链表): 题目 | 解答
  • 206 Reverse Linked List(反转链表): 题目 | 解答
  • 19 Remove Nth Node From End of List(删除链表的倒数第 N 个结点): 题目 | 解答
  • 141 Linked List Cycle(环形链表): 题目 | 解答
  • 146 LRU Cache(LRU 缓存): 题目 | 解答

4. 栈

重点套路:

  • 括号匹配
  • 表达式求值
  • 路径规整

必会题:

5. 树 / 图

重点套路:

  • DFS
  • BFS
  • 递归定义子问题
  • 拓扑排序

必会题:

  • 104 Maximum Depth of Binary Tree(二叉树的最大深度): 题目 | 解答
  • 102 Binary Tree Level Order Traversal(二叉树的层序遍历): 题目 | 解答
  • 98 Validate Binary Search Tree(验证二叉搜索树): 题目 | 解答
  • 236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先): 题目 | 解答
  • 200 Number of Islands(岛屿数量): 题目 | 解答
  • 207 Course Schedule(课程表): 题目 | 解答

6. 二分 / 堆

重点套路:

  • 有序区间判定
  • 左闭右闭模板
  • TopK
  • 优先队列

必会题:

  • 35 Search Insert Position(搜索插入位置): 题目 | 解答
  • 33 Search in Rotated Sorted Array(搜索旋转排序数组): 题目 | 解答
  • 153 Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值): 题目 | 解答
  • 215 Kth Largest Element in an Array(数组中的第 K 个最大元素): 题目 | 解答
  • 295 Find Median from Data Stream(数据流的中位数): 题目 | 解答

7. 动态规划

重点套路:

  • 状态定义
  • 状态转移
  • 初始化
  • 滚动数组优化

必会题:

面试使用建议

一面

重点复习:

  • 数组 / 哈希 / 双指针 / 滑动窗口
  • 链表
  • 二叉树基础遍历

二面

重点复习:

  • 二叉树综合题
  • 二分
  • DP

面试前一天

只看这些:

  • 每个分类 2 到 3 道模板题
  • 自己以前做错过的题
  • 复杂度和边界条件总结

不要再刷新难题,重点是保证熟练度、表达清晰度和模板稳定性。

DevPolarBear Interview Intelligence Lab