Appearance
数据结构和算法
大厂前端面试,算法题通常不会考得特别偏,但会反复考察相同套路。
这份题单的目标不是“题海战术”,而是把前端面试最常出现的套路一次性梳理清楚,面试前可以按频率快速复习。
TIP
- 这份清单按 2026-04-09 可见的 LeetCode 「面试经典 150 题」整理。
- 对前端同学来说,不需要平均发力,应该优先刷高频分类,再补全长尾题。
- 如果时间不够,先刷
P0 必刷,再刷P1 高频,最后再补P2 扩展。
TIP
如有疑问,可免费 加群 讨论咨询,也可参与 1v1 面试咨询服务,专业、系统、高效、全流程准备前端面试。
算法基础 Basic
磨刀不误砍柴工。刷题之前,先把数据结构、复杂度、常见解题套路补齐。
前端常见的数据结构有哪些?有什么应用场景?
数组 / 字符串
应用场景:
- 列表渲染、批量处理、表单数据处理
- URL / query 解析
- 文本搜索、编辑器、日志处理
基础算法:
- 排序、去重、二分查找
- 双指针、滑动窗口、前缀和
链表
应用场景:
- React Fiber
- LRU 缓存
- 任务调度、撤销重做
基础算法:
- 遍历、反转
- 快慢指针
- 虚拟头结点
栈
应用场景:
- 括号匹配
- 表达式求值
- 浏览器前进后退、撤销重做
基础算法:
pushpop- 单调栈
队列
应用场景:
- Event Loop
- 消息队列
- BFS 层序遍历
基础算法:
enqueuedequeue
树 / 二叉树
应用场景:
- 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
面试前冲刺顺序
- 先把
数组 + 哈希 + 双指针 + 滑动窗口刷透。 - 再刷
链表 + 栈 + 二叉树 + 二分。 - 最后补
DP + 图 + 堆 + 回溯。
前端高频必刷 50 题
如果你只剩 1 到 2 周,建议至少把下面这些题刷熟。
数组 / 哈希 / 双指针
1Two Sum(两数之和): 题目 | 解答121Best Time to Buy and Sell Stock(买卖股票的最佳时机): 题目 | 解答122Best Time to Buy and Sell Stock II(买卖股票的最佳时机 II): 题目 | 解答55Jump Game(跳跃游戏): 题目 | 解答45Jump Game II(跳跃游戏 II): 题目 | 解答238Product of Array Except Self(除自身以外数组的乘积): 题目 | 解答134Gas Station(加油站): 题目 | 解答42Trapping Rain Water(接雨水): 题目 | 解答125Valid Palindrome(验证回文串): 题目 | 解答167Two Sum II - Input Array Is Sorted(两数之和 II:输入有序数组): 题目 | 解答11Container With Most Water(盛最多水的容器): 题目 | 解答153Sum(三数之和): 题目 | 解答202Happy Number(快乐数): 题目 | 解答128Longest Consecutive Sequence(最长连续序列): 题目 | 解答
滑动窗口 / 字符串
3Longest Substring Without Repeating Characters(无重复字符的最长子串): 题目 | 解答76Minimum Window Substring(最小覆盖子串): 题目 | 解答209Minimum Size Subarray Sum(长度最小的子数组): 题目 | 解答49Group Anagrams(字母异位词分组): 题目 | 解答14Longest Common Prefix(最长公共前缀): 题目 | 解答151Reverse Words in a String(反转字符串中的单词): 题目 | 解答28Find the Index of the First Occurrence in a String(找出字符串中第一个匹配项的下标): 题目 | 解答
栈 / 链表
20Valid Parentheses(有效的括号): 题目 | 解答71Simplify Path(简化路径): 题目 | 解答155Min Stack(最小栈): 题目 | 解答150Evaluate Reverse Polish Notation(逆波兰表达式求值): 题目 | 解答141Linked List Cycle(环形链表): 题目 | 解答2Add Two Numbers(两数相加): 题目 | 解答21Merge Two Sorted Lists(合并两个有序链表): 题目 | 解答206Reverse Linked List(反转链表): 题目 | 解答19Remove Nth Node From End of List(删除链表的倒数第 N 个结点): 题目 | 解答146LRU Cache(LRU 缓存): 题目 | 解答
二叉树 / 图
104Maximum Depth of Binary Tree(二叉树的最大深度): 题目 | 解答226Invert Binary Tree(翻转二叉树): 题目 | 解答101Symmetric Tree(对称二叉树): 题目 | 解答102Binary Tree Level Order Traversal(二叉树的层序遍历): 题目 | 解答98Validate Binary Search Tree(验证二叉搜索树): 题目 | 解答230Kth Smallest Element in a BST(二叉搜索树中第 K 小的元素): 题目 | 解答236Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先): 题目 | 解答200Number of Islands(岛屿数量): 题目 | 解答133Clone Graph(克隆图): 题目 | 解答207Course Schedule(课程表): 题目 | 解答127Word Ladder(单词接龙): 题目 | 解答
二分 / 堆 / DP
35Search Insert Position(搜索插入位置): 题目 | 解答33Search in Rotated Sorted Array(搜索旋转排序数组): 题目 | 解答153Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值): 题目 | 解答215Kth Largest Element in an Array(数组中的第 K 个最大元素): 题目 | 解答70Climbing Stairs(爬楼梯): 题目 | 解答198House Robber(打家劫舍): 题目 | 解答139Word Break(单词拆分): 题目 | 解答322Coin Change(零钱兑换): 题目 | 解答300Longest Increasing Subsequence(最长递增子序列): 题目 | 解答5Longest Palindromic Substring(最长回文子串): 题目 | 解答
面试经典 Top 150 全量题单
下面按官方分类整理成适合前端复习的结构。建议复习时按分类批量刷,不要随机跳题。
分类跳转
- 1. 数组 / 字符串
- 2. 双指针
- 3. 滑动窗口
- 4. 矩阵
- 5. 哈希表
- 6. 区间
- 7. 栈
- 8. 链表
- 9. 二叉树 General
- 10. 二叉树 BFS
- 11. 图 General
- 12. 图 BFS
- 13. Trie
- 14. 回溯
- 15. 分治
- 16. Kadane
- 17. 二分查找
- 18. 堆
- 19. 位运算
- 20. 数学
- 21. 一维动态规划
- 22. 多维动态规划
1. 数组 / 字符串 Array and String 24 题
88Merge Sorted Array(合并两个有序数组): 题目 | 解答27Remove Element(移除元素): 题目 | 解答26Remove Duplicates from Sorted Array(删除有序数组中的重复项): 题目 | 解答80Remove Duplicates from Sorted Array II(删除有序数组中的重复项 II): 题目 | 解答169Majority Element(多数元素): 题目 | 解答189Rotate Array(轮转数组): 题目 | 解答121Best Time to Buy and Sell Stock(买卖股票的最佳时机): 题目 | 解答122Best Time to Buy and Sell Stock II(买卖股票的最佳时机 II): 题目 | 解答55Jump Game(跳跃游戏): 题目 | 解答45Jump Game II(跳跃游戏 II): 题目 | 解答274H-Index(H 指数): 题目 | 解答380Insert Delete Get Random O(1)(O(1) 时间插入、删除和获取随机元素): 题目 | 解答238Product of Array Except Self(除自身以外数组的乘积): 题目 | 解答134Gas Station(加油站): 题目 | 解答135Candy(分发糖果): 题目 | 解答42Trapping Rain Water(接雨水): 题目 | 解答13Roman to Integer(罗马数字转整数): 题目 | 解答12Integer to Roman(整数转罗马数字): 题目 | 解答58Length of Last Word(最后一个单词的长度): 题目 | 解答14Longest Common Prefix(最长公共前缀): 题目 | 解答151Reverse Words in a String(反转字符串中的单词): 题目 | 解答6Zigzag Conversion(Z 字形变换): 题目 | 解答28Find the Index of the First Occurrence in a String(找出字符串中第一个匹配项的下标): 题目 | 解答68Text Justification(文本左右对齐): 题目 | 解答
2. 双指针 Two Pointers 6 题
125Valid Palindrome(验证回文串): 题目 | 解答392Is Subsequence(判断子序列): 题目 | 解答11Container With Most Water(盛最多水的容器): 题目 | 解答167Two Sum II - Input Array Is Sorted(两数之和 II:输入有序数组): 题目 | 解答153Sum(三数之和): 题目 | 解答202Happy Number(快乐数): 题目 | 解答
3. 滑动窗口 Sliding Window 4 题
3Longest Substring Without Repeating Characters(无重复字符的最长子串): 题目 | 解答76Minimum Window Substring(最小覆盖子串): 题目 | 解答30Substring with Concatenation of All Words(串联所有单词的子串): 题目 | 解答209Minimum Size Subarray Sum(长度最小的子数组): 题目 | 解答
4. 矩阵 Matrix 5 题
36Valid Sudoku(有效的数独): 题目 | 解答54Spiral Matrix(螺旋矩阵): 题目 | 解答48Rotate Image(旋转图像): 题目 | 解答73Set Matrix Zeroes(矩阵置零): 题目 | 解答289Game of Life(生命游戏): 题目 | 解答
5. 哈希表 Hashmap 8 题
383Ransom Note(赎金信): 题目 | 解答205Isomorphic Strings(同构字符串): 题目 | 解答290Word Pattern(单词规律): 题目 | 解答242Valid Anagram(有效的字母异位词): 题目 | 解答49Group Anagrams(字母异位词分组): 题目 | 解答1Two Sum(两数之和): 题目 | 解答219Contains Duplicate II(存在重复元素 II): 题目 | 解答128Longest Consecutive Sequence(最长连续序列): 题目 | 解答
6. 区间 Intervals 4 题
228Summary Ranges(汇总区间): 题目 | 解答56Merge Intervals(合并区间): 题目 | 解答57Insert Interval(插入区间): 题目 | 解答452Minimum Number of Arrows to Burst Balloons(用最少数量的箭引爆气球): 题目 | 解答
7. 栈 Stack 5 题
20Valid Parentheses(有效的括号): 题目 | 解答71Simplify Path(简化路径): 题目 | 解答155Min Stack(最小栈): 题目 | 解答150Evaluate Reverse Polish Notation(逆波兰表达式求值): 题目 | 解答224Basic Calculator(基本计算器): 题目 | 解答
8. 链表 Linked List 11 题
141Linked List Cycle(环形链表): 题目 | 解答2Add Two Numbers(两数相加): 题目 | 解答21Merge Two Sorted Lists(合并两个有序链表): 题目 | 解答138Copy List with Random Pointer(随机链表的复制): 题目 | 解答206Reverse Linked List(反转链表): 题目 | 解答25Reverse Nodes in k-Group(K 个一组翻转链表): 题目 | 解答19Remove Nth Node From End of List(删除链表的倒数第 N 个结点): 题目 | 解答82Remove Duplicates from Sorted List II(删除排序链表中的重复元素 II): 题目 | 解答61Rotate List(旋转链表): 题目 | 解答86Partition List(分隔链表): 题目 | 解答146LRU Cache(LRU 缓存): 题目 | 解答
9. 二叉树 Binary Tree - General 14 题
104Maximum Depth of Binary Tree(二叉树的最大深度): 题目 | 解答100Same Tree(相同的树): 题目 | 解答226Invert Binary Tree(翻转二叉树): 题目 | 解答101Symmetric Tree(对称二叉树): 题目 | 解答105Construct Binary Tree from Preorder and Inorder Traversal(从前序与中序遍历序列构造二叉树): 题目 | 解答106Construct Binary Tree from Inorder and Postorder Traversal(从中序与后序遍历序列构造二叉树): 题目 | 解答117Populating Next Right Pointers in Each Node II(填充每个节点的下一个右侧节点指针 II): 题目 | 解答114Flatten Binary Tree to Linked List(二叉树展开为链表): 题目 | 解答112Path Sum(路径总和): 题目 | 解答129Sum Root to Leaf Numbers(求根节点到叶节点数字之和): 题目 | 解答124Binary Tree Maximum Path Sum(二叉树中的最大路径和): 题目 | 解答173Binary Search Tree Iterator(二叉搜索树迭代器): 题目 | 解答222Count Complete Tree Nodes(完全二叉树的节点个数): 题目 | 解答236Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先): 题目 | 解答
10. 二叉树 Binary Tree - BFS 7 题
199Binary Tree Right Side View(二叉树的右视图): 题目 | 解答637Average of Levels in Binary Tree(二叉树的层平均值): 题目 | 解答102Binary Tree Level Order Traversal(二叉树的层序遍历): 题目 | 解答103Binary Tree Zigzag Level Order Traversal(二叉树的锯齿形层序遍历): 题目 | 解答530Minimum Absolute Difference in BST(二叉搜索树的最小绝对差): 题目 | 解答230Kth Smallest Element in a BST(二叉搜索树中第 K 小的元素): 题目 | 解答98Validate Binary Search Tree(验证二叉搜索树): 题目 | 解答
11. 图 Graph - General 6 题
200Number of Islands(岛屿数量): 题目 | 解答130Surrounded Regions(被围绕的区域): 题目 | 解答133Clone Graph(克隆图): 题目 | 解答399Evaluate Division(除法求值): 题目 | 解答207Course Schedule(课程表): 题目 | 解答210Course Schedule II(课程表 II): 题目 | 解答
12. 图 Graph - BFS 3 题
909Snakes and Ladders(蛇梯棋): 题目 | 解答433Minimum Genetic Mutation(最小基因变化): 题目 | 解答127Word Ladder(单词接龙): 题目 | 解答
13. Trie 3 题
208Implement Trie (Prefix Tree)(实现 Trie 前缀树): 题目 | 解答211Design Add and Search Words Data Structure(添加与搜索单词的数据结构设计): 题目 | 解答212Word Search II(单词搜索 II): 题目 | 解答
14. 回溯 Backtracking 7 题
17Letter Combinations of a Phone Number(电话号码的字母组合): 题目 | 解答77Combinations(组合): 题目 | 解答46Permutations(全排列): 题目 | 解答39Combination Sum(组合总和): 题目 | 解答52N-Queens II(N 皇后 II): 题目 | 解答22Generate Parentheses(括号生成): 题目 | 解答79Word Search(单词搜索): 题目 | 解答
15. 分治 Divide and Conquer 4 题
108Convert Sorted Array to Binary Search Tree(将有序数组转换为二叉搜索树): 题目 | 解答148Sort List(排序链表): 题目 | 解答427Construct Quad Tree(建立四叉树): 题目 | 解答23Merge k Sorted Lists(合并 K 个升序链表): 题目 | 解答
16. Kadane 2 题
17. 二分查找 Binary Search 7 题
35Search Insert Position(搜索插入位置): 题目 | 解答74Search a 2D Matrix(搜索二维矩阵): 题目 | 解答162Find Peak Element(寻找峰值): 题目 | 解答33Search in Rotated Sorted Array(搜索旋转排序数组): 题目 | 解答34Find First and Last Position of Element in Sorted Array(在排序数组中查找元素的第一个和最后一个位置): 题目 | 解答153Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值): 题目 | 解答4Median of Two Sorted Arrays(寻找两个正序数组的中位数): 题目 | 解答
18. 堆 Heap 4 题
215Kth Largest Element in an Array(数组中的第 K 个最大元素): 题目 | 解答502IPO(IPO 项目选择): 题目 | 解答373Find K Pairs with Smallest Sums(查找和最小的 K 对数字): 题目 | 解答295Find Median from Data Stream(数据流的中位数): 题目 | 解答
19. 位运算 Bit Manipulation 6 题
67Add Binary(二进制求和): 题目 | 解答190Reverse Bits(颠倒二进制位): 题目 | 解答191Number of 1 Bits(位 1 的个数): 题目 | 解答136Single Number(只出现一次的数字): 题目 | 解答137Single Number II(只出现一次的数字 II): 题目 | 解答201Bitwise AND of Numbers Range(数字范围按位与): 题目 | 解答
20. 数学 Math 6 题
9Palindrome Number(回文数): 题目 | 解答66Plus One(加一): 题目 | 解答172Factorial Trailing Zeroes(阶乘后的零): 题目 | 解答69Sqrt(x)(x 的平方根): 题目 | 解答50Pow(x, n)(x 的 n 次幂): 题目 | 解答149Max Points on a Line(直线上最多的点数): 题目 | 解答
21. 一维动态规划 1D Dynamic Programming 5 题
70Climbing Stairs(爬楼梯): 题目 | 解答198House Robber(打家劫舍): 题目 | 解答139Word Break(单词拆分): 题目 | 解答322Coin Change(零钱兑换): 题目 | 解答300Longest Increasing Subsequence(最长递增子序列): 题目 | 解答
22. 多维动态规划 Multidimensional Dynamic Programming 9 题
120Triangle(三角形最小路径和): 题目 | 解答64Minimum Path Sum(最小路径和): 题目 | 解答63Unique Paths II(不同路径 II): 题目 | 解答5Longest Palindromic Substring(最长回文子串): 题目 | 解答97Interleaving String(交错字符串): 题目 | 解答72Edit Distance(编辑距离): 题目 | 解答123Best Time to Buy and Sell Stock III(买卖股票的最佳时机 III): 题目 | 解答188Best Time to Buy and Sell Stock IV(买卖股票的最佳时机 IV): 题目 | 解答221Maximal Square(最大正方形): 题目 | 解答
高频分类速查
1. 数组 / 哈希
重点套路:
- 原地修改
- 哈希计数
- 前缀积 / 前缀和
- 贪心
必会题:
1Two Sum(两数之和): 题目 | 解答169Majority Element(多数元素): 题目 | 解答238Product of Array Except Self(除自身以外数组的乘积): 题目 | 解答128Longest Consecutive Sequence(最长连续序列): 题目 | 解答134Gas Station(加油站): 题目 | 解答
2. 双指针 / 滑动窗口
重点套路:
- 左右指针逼近
- 快慢指针
- 维护窗口合法性
必会题:
11Container With Most Water(盛最多水的容器): 题目 | 解答153Sum(三数之和): 题目 | 解答3Longest Substring Without Repeating Characters(无重复字符的最长子串): 题目 | 解答76Minimum Window Substring(最小覆盖子串): 题目 | 解答209Minimum Size Subarray Sum(长度最小的子数组): 题目 | 解答
3. 链表
重点套路:
- 虚拟头结点
- 快慢指针
- 原地反转
- 多指针重连
必会题:
21Merge Two Sorted Lists(合并两个有序链表): 题目 | 解答206Reverse Linked List(反转链表): 题目 | 解答19Remove Nth Node From End of List(删除链表的倒数第 N 个结点): 题目 | 解答141Linked List Cycle(环形链表): 题目 | 解答146LRU Cache(LRU 缓存): 题目 | 解答
4. 栈
重点套路:
- 括号匹配
- 表达式求值
- 路径规整
必会题:
20Valid Parentheses(有效的括号): 题目 | 解答71Simplify Path(简化路径): 题目 | 解答155Min Stack(最小栈): 题目 | 解答150Evaluate Reverse Polish Notation(逆波兰表达式求值): 题目 | 解答
5. 树 / 图
重点套路:
- DFS
- BFS
- 递归定义子问题
- 拓扑排序
必会题:
104Maximum Depth of Binary Tree(二叉树的最大深度): 题目 | 解答102Binary Tree Level Order Traversal(二叉树的层序遍历): 题目 | 解答98Validate Binary Search Tree(验证二叉搜索树): 题目 | 解答236Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先): 题目 | 解答200Number of Islands(岛屿数量): 题目 | 解答207Course Schedule(课程表): 题目 | 解答
6. 二分 / 堆
重点套路:
- 有序区间判定
- 左闭右闭模板
- TopK
- 优先队列
必会题:
35Search Insert Position(搜索插入位置): 题目 | 解答33Search in Rotated Sorted Array(搜索旋转排序数组): 题目 | 解答153Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值): 题目 | 解答215Kth Largest Element in an Array(数组中的第 K 个最大元素): 题目 | 解答295Find Median from Data Stream(数据流的中位数): 题目 | 解答
7. 动态规划
重点套路:
- 状态定义
- 状态转移
- 初始化
- 滚动数组优化
必会题:
70Climbing Stairs(爬楼梯): 题目 | 解答198House Robber(打家劫舍): 题目 | 解答139Word Break(单词拆分): 题目 | 解答322Coin Change(零钱兑换): 题目 | 解答300Longest Increasing Subsequence(最长递增子序列): 题目 | 解答5Longest Palindromic Substring(最长回文子串): 题目 | 解答
面试使用建议
一面
重点复习:
- 数组 / 哈希 / 双指针 / 滑动窗口
- 链表
- 栈
- 二叉树基础遍历
二面
重点复习:
- 二叉树综合题
- 图
- 二分
- 堆
- DP
面试前一天
只看这些:
- 每个分类 2 到 3 道模板题
- 自己以前做错过的题
- 复杂度和边界条件总结
不要再刷新难题,重点是保证熟练度、表达清晰度和模板稳定性。