面试中最常考的数据结构与算法题,适合作为刷题的第一阶段重点。
✅ 分类 & 推荐题目列表(精选 70 道核心题)
一、数组 & 字符串(共 15 题)
题目 | 类型 | LeetCode编号 |
---|
两数之和 | 哈希表 | #1 |
盛最多水的容器 | 双指针 | #11 |
三数之和 | 排序+双指针 | #15 |
移动零 | 原地操作 | #283 |
合并两个有序数组 | 双指针 | #88 |
最长公共前缀 | 字符串处理 | #14 |
字符串相加 | 模拟 | #415 |
字符串转换整数 | 字符串处理 | #8 |
有效的括号 | 栈 | #20 |
反转字符串 | 双指针 | #344 |
实现 strStr() | 双指针/KMP | #28 |
最长不重复子串 | 滑动窗口 | #3 |
找出所有异位词 | 哈希 + 排序 | #438 |
轮转数组 | 数组翻转 | #189 |
矩阵置零 | 空间优化 | #73 |
二、链表(共 10 题)
题目 | 类型 | LeetCode编号 |
---|
反转链表 | 迭代/递归 | #206 |
合并两个有序链表 | 递归/迭代 | #21 |
环形链表 | 快慢指针 | #141 |
相交链表 | 指针遍历 | #160 |
删除链表的倒数第 N 个节点 | 双指针 | #19 |
链表中间结点 | 快慢指针 | #876 |
K 个一组反转链表 | 高频 | #25 |
排序链表 | 归并排序 | #148 |
复制带随机指针的链表 | 哈希 | #138 |
删除重复元素 II | 链表操作 | #82 |
三、栈、队列、堆(共 8 题)
题目 | 类型 | LeetCode编号 |
---|
用栈实现队列 | 双栈 | #232 |
最小栈 | 辅助栈 | #155 |
有效的括号 | 栈 | #20 |
滑动窗口最大值 | 单调队列/堆 | #239 |
用队列实现栈 | 双队列 | #225 |
前 K 个高频元素 | 小顶堆 | #347 |
数据流的中位数 | 双堆 | #295 |
实现 LRU 缓存 | 双链表+哈希 | #146 |
四、哈希表(共 6 题)
题目 | 类型 | LeetCode编号 |
---|
两数之和 | 哈希表 | #1 |
存在重复元素 | 哈希表 | #217 |
有效的字母异位词 | 计数器 | #242 |
字符串中的第一个唯一字符 | 哈希表 | #387 |
和为 K 的子数组 | 前缀和 + 哈希 | #560 |
四数之和 | 排序 + 哈希 | #18 |
五、二叉树 & 图(共 12 题)
题目 | 类型 | LeetCode编号 |
---|
二叉树的最大深度 | DFS | #104 |
二叉树的层序遍历 | BFS | #102 |
对称二叉树 | DFS/BFS | #101 |
验证二叉搜索树 | 中序遍历 | #98 |
另一棵树的子树 | 递归判断 | #572 |
从前序与中序遍历构造二叉树 | 分治 | #105 |
二叉树的最近公共祖先 | DFS | #236 |
翻转二叉树 | DFS | #226 |
合并二叉树 | DFS | #617 |
课程表(拓扑排序) | 图 | #207 |
克隆图 | DFS/BFS | #133 |
二叉树的直径 | 后序DFS | #543 |
六、排序 & 查找(共 7 题)
题目 | 类型 | LeetCode编号 |
---|
合并区间 | 排序 | #56 |
搜索旋转排序数组 | 二分查找 | #33 |
搜索二维矩阵 | 二分查找 | #74 |
寻找峰值 | 二分查找 | #162 |
第 K 个最大元素 | 快排 / 堆 | #215 |
快速排序手写实现 | 模板题 | — |
合并 K 个升序链表 | 堆 | #23 |
七、动态规划(共 12 题)
题目 | 类型 | LeetCode编号 |
---|
爬楼梯 | DP | #70 |
不同路径 | DP | #62 |
零钱兑换 | 背包问题 | #322 |
0-1 背包(模板) | 背包DP | — |
最长回文子串 | 中心扩展 / DP | #5 |
编辑距离 | 字符串DP | #72 |
最长递增子序列 | DP | #300 |
打家劫舍 | 线性DP | #198 |
最大子序和 | 贪心 / DP | #53 |
股票买卖系列 | 状态机DP | #121、#122、#123 |
跳跃游戏 | 贪心 / DP | #55 |
买卖股票的最佳时机含冷冻期 | DP | #309 |
📝 补充建议
推荐刷题平台:
- LeetCode(国际 + 中文)
- 牛客网剑指Offer专项训练
- 洛谷
刷题工具建议:
- 使用 C++17 编写并通过本地或 VSCode + CMake 运行测试;
- 建议写一个
template.cpp
包含通用头文件/结构体/调试宏,便于快速测试。