以下是一份针对程序员面试的经典刷题清单,涵盖算法与数据结构的核心考点,适合准备技术面试(如 LeetCode、剑指 Offer、大厂面试等)。题目按类别和难度分级,帮助你系统化复习。
一、数组与字符串
-
Two Sum(两数之和)
- 考察点:哈希表优化
- 题目:LeetCode 1
-
Container With Most Water(盛最多水的容器)
- 考察点:双指针
- 题目:LeetCode 11
-
Longest Substring Without Repeating Characters(无重复字符的最长子串)
- 考察点:滑动窗口 + 哈希表
- 题目:LeetCode 3
-
3Sum(三数之和)
- 考察点:排序 + 双指针去重
- 题目:LeetCode 15
二、链表
-
Merge Two Sorted Lists(合并两个有序链表)
- 考察点:链表基本操作
- 题目:LeetCode 21
-
Reverse Linked List(反转链表)
- 考察点:递归/迭代实现
- 题目:LeetCode 206
-
Linked List Cycle(环形链表)
- 考察点:快慢指针(Floyd 算法)
- 题目:LeetCode 141
-
Copy List with Random Pointer(复制带随机指针的链表)
- 考察点:深拷贝 + 哈希表
- 题目:LeetCode 138
三、树与图
-
Binary Tree Inorder Traversal(二叉树的中序遍历)
- 考察点:递归/迭代遍历
- 题目:LeetCode 94
-
Validate Binary Search Tree(验证二叉搜索树)
- 考察点:BST 特性 + 递归
- 题目:LeetCode 98
-
Number of Islands(岛屿数量)
- 考察点:DFS/BFS 遍历图
- 题目:LeetCode 200
-
Course Schedule(课程表)
- 考察点:拓扑排序(入度表 + BFS)
- 题目:LeetCode 207
四、动态规划(DP)
-
Climbing Stairs(爬楼梯)
- 考察点:斐波那契数列变种
- 题目:LeetCode 70
-
Longest Palindromic Substring(最长回文子串)
- 考察点:中心扩展法或 DP
- 题目:LeetCode 5
-
Coin Change(零钱兑换)
- 考察点:背包问题变种
- 题目:LeetCode 322
-
Edit Distance(编辑距离)
- 考察点:二维 DP 表设计
- 题目:LeetCode 72
五、回溯与递归
-
Subsets(子集)
- 考察点:回溯法生成所有组合
- 题目:LeetCode 78
-
Permutations(全排列)
- 考察点:回溯法 + 交换元素
- 题目:LeetCode 46
-
N-Queens(N 皇后)
- 考察点:回溯法 + 剪枝
- 题目:LeetCode 51
六、其他高频题
-
Implement Trie (Prefix Tree)(实现前缀树)
- 考察点:Trie 树结构设计
- 题目:LeetCode 208
-
LRU Cache(LRU 缓存机制)
- 考察点:哈希表 + 双向链表
- 题目:LeetCode 146
-
Merge Intervals(合并区间)
- 考察点:排序 + 区间合并逻辑
- 题目:LeetCode 56
-
Top K Frequent Elements(前 K 个高频元素)
- 考察点:堆(Heap)或快速选择(Quickselect)
- 题目:LeetCode 347
七、系统设计(高级)
-
设计 TinyURL
- 考察点:哈希短网址生成 + 碰撞处理
- 题目:LeetCode 535
-
设计停车场系统
- 考察点:面向对象设计 + 状态管理
-
设计消息队列
- 考察点:分布式系统基础
刷题建议
- 按类型刷:集中攻克同一类问题(如先刷完所有链表题)。
- 高频优先:优先解决高频面试题(如 Two Sum、LRU Cache)。
- 手写代码:模拟面试环境,白板或纸笔写代码。
- 总结规律:如动态规划的“状态转移方程”、回溯的“剪枝条件”等。
推荐资源
- 书籍:《算法导论》《剑指 Offer》《Cracking the Coding Interview》
- 网站:LeetCode、LintCode、牛客网
- 视频:MIT 算法课、B 站《花花酱 LeetCode》
根据目标公司(如 Google、字节跳动)调整刷题重点,大厂常考「动态规划」「图论」「系统设计」等高阶题。