数据结构和算法
大厂前端面试,算法题通常不会考得特别偏,但会反复考察相同套路。
这份题单的目标不是“题海战术”,而是把前端面试最常出现的套路一次性梳理清楚,面试前可以按频率快速复习。
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: 题目 | 解答55Jump Game: 题目 | 解答45Jump Game II: 题目 | 解答238Product of Array Except Self: 题目 | 解答134Gas Station: 题目 | 解答42Trapping Rain Water: 题目 | 解答125Valid Palindrome: 题目 | 解答167Two Sum II - Input Array Is Sorted: 题目 | 解答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: 题目 | 解答146LRU Cache: 题目 | 解答
二叉树 / 图
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: 题目 | 解答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: 题目 | 解答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: 题目 | 解答169Majority Element: 题目 | 解答189Rotate Array: 题目 | 解答121Best Time to Buy and Sell Stock: 题目 | 解答122Best Time to Buy and Sell Stock II: 题目 | 解答55Jump Game: 题目 | 解答45Jump Game II: 题目 | 解答274H-Index: 题目 | 解答380Insert Delete Get Random 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: 题目 | 解答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: 题目 | 解答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: 题目 | 解答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: 题目 | 解答19Remove Nth Node From End of List: 题目 | 解答82Remove Duplicates from Sorted List II: 题目 | 解答61Rotate List: 题目 | 解答86Partition List: 题目 | 解答146LRU Cache: 题目 | 解答
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: 题目 | 解答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: 题目 | 解答98Validate Binary Search Tree: 题目 | 解答
11. 图 Graph - General 6 题
200Number of Islands: 题目 | 解答130Surrounded Regions: 题目 | 解答133Clone Graph: 题目 | 解答399Evaluate Division: 题目 | 解答207Course Schedule: 题目 | 解答210Course Schedule II: 题目 | 解答
12. 图 Graph - BFS 3 题
13. Trie 3 题
208Implement Trie (Prefix Tree): 题目 | 解答211Design Add and Search Words Data Structure: 题目 | 解答212Word Search II: 题目 | 解答
14. 回溯 Backtracking 7 题
17Letter Combinations of a Phone Number: 题目 | 解答77Combinations: 题目 | 解答46Permutations: 题目 | 解答39Combination Sum: 题目 | 解答52N-Queens 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: 题目 | 解答
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: 题目 | 解答502IPO: 题目 | 解答373Find K Pairs with Smallest Sums: 题目 | 解答295Find Median from Data Stream: 题目 | 解答
19. 位运算 Bit Manipulation 6 题
67Add Binary: 题目 | 解答190Reverse Bits: 题目 | 解答191Number of 1 Bits: 题目 | 解答136Single Number: 题目 | 解答137Single Number II: 题目 | 解答201Bitwise AND of Numbers Range: 题目 | 解答
20. 数学 Math 6 题
9Palindrome Number: 题目 | 解答66Plus One: 题目 | 解答172Factorial Trailing Zeroes: 题目 | 解答69Sqrt(x): 题目 | 解答50Pow(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: 题目 | 解答5Longest Palindromic Substring: 题目 | 解答97Interleaving String: 题目 | 解答72Edit Distance: 题目 | 解答123Best Time to Buy and Sell Stock III: 题目 | 解答188Best Time to Buy and Sell Stock 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: 题目 | 解答141Linked List Cycle: 题目 | 解答146LRU Cache: 题目 | 解答
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: 题目 | 解答295Find Median from Data Stream: 题目 | 解答
7. 动态规划
重点套路:
- 状态定义
- 状态转移
- 初始化
- 滚动数组优化
必会题:
70Climbing Stairs: 题目 | 解答198House Robber: 题目 | 解答139Word Break: 题目 | 解答322Coin Change: 题目 | 解答300Longest Increasing Subsequence: 题目 | 解答5Longest Palindromic Substring: 题目 | 解答
面试使用建议
一面
重点复习:
- 数组 / 哈希 / 双指针 / 滑动窗口
- 链表
- 栈
- 二叉树基础遍历
二面
重点复习:
- 二叉树综合题
- 图
- 二分
- 堆
- DP
面试前一天
只看这些:
- 每个分类 2 到 3 道模板题
- 自己以前做错过的题
- 复杂度和边界条件总结
不要再刷新难题,重点是保证熟练度、表达清晰度和模板稳定性。