本章导读
本章精选了来自 LeetCode 和 《剑指 Offer》 中的高频经典题目。这些题目不仅是面试的常客,更是锤炼你编程思维的绝佳素材。我们将按照数据结构和算法思想进行分类,助你系统性地进行学习和突破。
1. 核心数据结构 (Core Data Structures)
这是构建所有复杂算法的基础。
- 数组 (Array):双指针、滑动窗口、二分查找等。
- 字符串 (String):模式匹配、回文串、最长子序列等。
- 链表 (Linked List):反转链表、合并链表、环形链表检测等。
- 栈与队列 (Stack & Queue):括号匹配、用栈实现队列、滑动窗口最大值等。
- 哈希表 (Hash Table):两数之和、无重复字符的最长子串、字母异位词分组等。
- 树 (Tree):二叉树的遍历(前/中/后/层序)、深度/广度优先搜索 (DFS/BFS)、平衡二叉树、路径总和等。
2. 核心算法思想 (Core Algorithmic Concepts)
掌握这些思想,你将能应对千变万化的题目。
- 排序算法 (Sorting):快速排序、归并排序、堆排序等。
- 搜索算法 (Searching):深度优先搜索 (DFS)、广度优先搜索 (BFS)。
- 动态规划 (Dynamic Programming - DP):背包问题、最长递增子序列、斐波那契数列变体等。
- 回溯算法 (Backtracking):全排列、组合、子集、N 皇后问题等。
- 贪心算法 (Greedy Algorithm):分发饼干、跳跃游戏等。
- 位运算 (Bit Manipulation):高效解决特定计算问题。
数组
数组的改变、移动
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0283 | 移动零 | 🟢 | 数组、双指针 | 2025-07-03 |
二维数组及滚动数组
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0118 | 杨辉三角 | 🟢 | 数组、动态规划 | 2025-07-03 |
特定顺序遍历二维数组
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0054 | 螺旋矩阵 | 🟡 | 数组、矩阵、模拟 | 2025-07-03 |
二维数组变换
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0048 | 旋转图像 | 🟡 | 数组、数学、矩阵 | 2025-07-03 |
字符串
回文串的定义
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0125 | 验证回文串 | 🟢 | 双指针、字符串 | 2025-07-03 |
公共前缀
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0014 | 最长公共前缀 | 🟢 | 字符串、分治 | 2025-07-03 |
字符串的反转
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0344 | 反转字符串 | 🟢 | 双指针、字符串、递归 | 2025-07-03 |
字符的统计
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0049 | 字母异位词分组 | 🟡 | 哈希表、字符串、排序 | 2025-07-03 |
0242 | 有效的字母异位词 | 🟢 | 哈希表、字符串、排序 | 2025-07-03 |
数字与字符串间转换
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0013 | 罗马数字转整数 | 🟢 | 哈希表、数学、字符串 | 2025-07-03 |
高精度运算
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0067 | 二进制求和 | 🟢 | 数学、字符串、位运算、模拟 | 2025-07-03 |
0415 | 字符串相加 | 🟢 | 数学、字符串、模拟、双指针 | 2025-07-03 |
字符串变换
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0006 | Z字形变换 | 🟡 | 字符串 | 2025-07-03 |
字符串匹配
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0028 | 找出字符串中第一个匹配项的下标 | 🟢 | 字符串、双指针 | 2025-07-03 |
0459 | 重复的子字符串 | 🟢 | 字符串、字符串匹配 | 2025-07-03 |
中心拓展法
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0005 | 最长回文子串 | 🟡 | 字符串、动态规划 | 2025-07-03 |
数与位
数字的位操作
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0007 | 整数反转 | 🟡 | 数学 | 2025-07-03 |
0009 | 回文数 | 🟢 | 数学 | 2025-07-03 |
简单数学题
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
2235 | 两整数相加 | 🟢 | 数学 | 2025-07-03 |
栈与递归
用栈访问最后若干元素
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
1047 | 删除字符串中的所有相邻重复项 | 🟢 | 栈、字符串 | 2025-07-03 |
栈与括号匹配
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0020 | 有效的括号 | 🟢 | 栈、字符串 | 2025-07-03 |
链表
链表的删除
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0019 | 删除链表的倒数第N个结点 | 🟡 | 链表、双指针 | 2025-07-03 |
0203 | 移除链表元素 | 🟢 | 链表、递归 | 2025-07-03 |
链表的旋转与反转
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0024 | 两两交换链表中的节点 | 🟡 | 链表、递归 | 2025-07-03 |
0092 | 反转链表 II | 🟡 | 链表 | 2025-07-03 |
0206 | 反转链表 | 🟢 | 递归、链表 | 2025-07-03 |
链表高精度加法
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0002 | 两数相加 | 🟡 | 链表、数学、递归 | 2025-07-03 |
链表的合并
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0021 | 合并两个有序链表 | 🟢 | 递归、链表 | 2025-07-03 |
哈希表
哈希表的查找、插入及删除
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0128 | 最长连续序列 | 🟡 | 数组、哈希表、并查集 | 2025-07-03 |
0202 | 快乐数 | 🟢 | 哈希表、数学、双指针 | 2025-07-03 |
0349 | 两个数组的交集 | 🟢 | 数组、哈希表、双指针、排序 | 2025-07-03 |
哈希表与索引
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0001 | 两数之和 | 🟢 | 数组、哈希表 | 2025-07-03 |
哈希表与统计
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0018 | 四数之和 | 🟡 | 数组、双指针、排序 | 2025-07-03 |
贪心算法
数组与贪心算法
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0056 | 合并区间 | 🟡 | 数组、排序 | 2025-07-03 |
0121 | 买卖股票的最佳时机 | 🟢 | 数组、动态规划 | 2025-07-03 |
0122 | 买卖股票的最佳时机 II | 🟢 | 数组、贪心、动态规划 | 2025-07-03 |
0169 | 多数元素 | 🟢 | 数组、哈希表、分治、排序、计数 | 2025-07-03 |
0215 | 数组中的第K个最大元素 | 🟡 | 数组、分治、快速选择、排序、堆 | 2025-07-03 |
子数组与贪心算法
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0053 | 最大子数组和 | 🟡 | 数组、分治、动态规划 | 2025-07-03 |
双指针法
头尾指针
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0011 | 盛水最多的容器 | 🟡 | 贪心、数组、双指针 | 2025-07-03 |
0015 | 三数之和 | 🟡 | 数组、双指针、排序 | 2025-07-03 |
0016 | 最接近的三数之和 | 🟡 | 数组、双指针、排序 | 2025-07-03 |
0977 | 有序数组的平方 | 🟢 | 数组、双指针、排序 | 2025-07-03 |
同向双指针、滑动窗口
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0003 | 无重复字符的最长子串 | 🟡 | 哈希表、字符串、滑动窗口 | 2025-07-03 |
0026 | 删除有序数组中的重复项 | 🟢 | 数组、双指针 | 2025-07-03 |
0027 | 移除元素 | 🟢 | 数组、双指针 | 2025-07-03 |
0083 | 删除排序链表中的重复元素 | 🟢 | 链表 | 2025-07-03 |
0209 | 长度最小的子数组 | 🟡 | 数组、二分查找、前缀和、滑动窗口 | 2025-07-03 |
1768 | 交替合并字符串 | 🟢 | 字符串、双指针 | 2025-07-03 |
分段双指针
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0088 | 合并两个有序数组 | 🟢 | 数组、双指针、排序 | 2025-07-03 |
0160 | 相交链表 | 🟢 | 哈希表、链表、双指针 | 2025-07-03 |
快慢指针
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0141 | 环形链表 | 🟢 | 哈希表、链表、双指针 | 2025-07-03 |
0142 | 环形链表 II | 🟡 | 哈希表、链表、双指针 | 2025-07-03 |
0143 | 重排链表 | 🟡 | 链表、双指针、栈、递归 | 2025-07-03 |
0234 | 回文链表 | 🟢 | 链表、双指针、栈、递归 | 2025-07-03 |
树
树与递归
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0101 | 对称二叉树 | 🟢 | 树、深度优先搜索、广度优先搜索、二叉树 | 2025-07-03 |
0226 | 翻转二叉树 | 🟢 | 树、深度优先搜索、广度优先搜索、二叉树、递归 | 2025-07-03 |
0543 | 二叉树的直径 | 🟢 | 树、深度优先搜索、二叉树、递归 | 2025-07-03 |
0572 | 另一棵树的子树 | 🟢 | 树、深度优先搜索、二叉树、递归 | 2025-07-03 |
树的层次遍历
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0102 | 二叉树的层序遍历 | 🟡 | 树、广度优先搜索、二叉树 | 2025-07-03 |
0103 | 二叉树的锯齿形层序遍历 | 🟡 | 树、广度优先搜索、二叉树、队列 | 2025-07-03 |
0104 | 二叉树的最大深度 | 🟢 | 树、深度优先搜索、广度优先搜索、二叉树、递归 | 2025-07-03 |
0111 | 二叉树的最小深度 | 🟢 | 树、深度优先搜索、广度优先搜索、二叉树、递归 | 2025-07-03 |
0112 | 路径总和 | 🟢 | 树、深度优先搜索、广度优先搜索、二叉树、递归 | 2025-07-03 |
0199 | 二叉树的右视图 | 🟡 | 树、深度优先搜索、广度优先搜索、二叉树 | 2025-07-03 |
树的前序遍历
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0144 | 二叉树的前序遍历 | 🟢 | 栈、树、深度优先搜索、二叉树、递归 | 2025-07-03 |
树的中序遍历与二叉搜索树
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0094 | 二叉树的中序遍历 | 🟢 | 栈、树、深度优先搜索、二叉树、递归 | 2025-07-03 |
0110 | 平衡二叉树 | 🟢 | 树、深度优先搜索、二叉树、递归 | 2025-07-03 |
最近公共祖先
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0236 | 二叉树的最近公共祖先 | 🟡 | 树、深度优先搜索、二叉树 | 2025-07-03 |
图与搜索
深度优先搜索
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0017 | 电话号码的字母组合 | 🟡 | 哈希表、字符串、回溯 | 2025-07-03 |
回溯法
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0039 | 组合总和 | 🟡 | 数组、回溯 | 2025-07-03 |
0046 | 全排列 | 🟡 | 数组、回溯 | 2025-07-03 |
0047 | 全排列 II | 🟡 | 数组、回溯 | 2025-07-03 |
0077 | 组合 | 🟡 | 数组、回溯 | 2025-07-03 |
0078 | 子集 | 🟡 | 位运算、数组、回溯 | 2025-07-03 |
0093 | 复原 IP 地址 | 🟡 | 字符串、回溯 | 2025-07-03 |
回溯法与括号
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0022 | 括号生成 | 🟡 | 字符串、动态规划、回溯 | 2025-07-03 |
广度优先搜索
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0200 | 岛屿数量 | 🟡 | 深度优先搜索、广度优先搜索、并查集、数组、矩阵 | 2025-07-03 |
二分查找
二分查找应用(简单)
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0035 | 搜索插入位置 | 🟢 | 数组、二分查找 | 2025-07-03 |
0069 | x的平方根 | 🟢 | 数学、二分查找 | 2025-07-03 |
0704 | 二分查找 | 🟢 | 数组、二分查找 | 2025-07-03 |
二分查找应用(中等)
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0300 | 最长递增子序列 | 🟡 | 数组、动态规划、二分查找 | 2025-07-03 |
二进制运算的应用
异或的应用
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0136 | 只出现一次的数字 | 🟢 | 位运算、数组、哈希表 | 2025-07-03 |
动态规划
数组中的动态规划
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0070 | 爬楼梯 | 🟢 | 动态规划、记忆化搜索、数学 | 2025-07-03 |
0198 | 打家劫舍 | 🟡 | 数组、动态规划 | 2025-07-03 |
0509 | 斐波那契数 | 🟢 | 动态规划、记忆化搜索、数学、递归 | 2025-07-03 |
子数组、子序列中的动态规划
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
1143 | 最长公共子序列 | 🟡 | 字符串、动态规划 | 2025-07-03 |
背包问题
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0322 | 零钱兑换 | 🟡 | 广度优先搜索、数组、动态规划 | 2025-07-03 |
矩阵中的动态规划
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0746 | 使用最小花费爬楼梯 | 🟢 | 数组、动态规划 | 2025-07-03 |
动态规划与字符串匹配
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0072 | 编辑距离 | 🟡 | 字符串、动态规划 | 2025-07-03 |
数据结构
数据结构设计——栈与队列
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0155 | 最小栈 | 🟢 | 栈、设计 | 2025-07-03 |
0225 | 用队列实现栈 | 🟢 | 栈、设计、队列 | 2025-07-03 |
0232 | 用栈实现队列 | 🟢 | 栈、设计、队列 | 2025-07-03 |
数据结构设计——哈希与双向链表
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
0146 | LRU缓存 | 🟡 | 哈希表、链表、设计、双向链表 | 2025-07-03 |
采样
计算几何
常用技巧与算法
剑指 Offer
编号 | 题目 | 难度 | 标签 | 最后更新 |
---|---|---|---|---|
LCR 120 | 寻找文件副本 | 🟢 | 数组、哈希表、排序 | 2025-07-03 |
LCR 121 | 寻找目标值 | 🟡 | 数组、二分查找、矩阵 | 2025-07-03 |
LCR 125 | 用队列实现栈 | 🟢 | 栈、设计、队列 | 2025-07-03 |
LCR 126 | 斐波那契数 | 🟢 | 动态规划、记忆化搜索、数学 | 2025-07-03 |
LCR 127 | 训练计划 V | 🟢 | 动态规划、记忆化搜索、数学 | 2025-07-03 |
LCR 139 | 训练计划 I | 🟢 | 数组、双指针、排序 | 2025-07-03 |
LCR 140 | 训练计划 II | 🟢 | 链表、双指针 | 2025-07-03 |
LCR 144 | 翻转二叉树 | 🟢 | 树、深度优先搜索、二叉树、递归 | 2025-07-03 |
LCR 146 | 螺旋遍历二维数组 | 🟡 | 数组、矩阵、模拟 | 2025-07-03 |
LCR 158 | 库存管理 I | 🟢 | 数组、哈希表、分治、排序、计数 | 2025-07-03 |
LCR 161 | 销售区域最大销售额 | 🟡 | 数组、分治、动态规划 | 2025-07-03 |
LCR 171 | 链表中第一个公共节点 | 🟢 | 哈希表、链表、双指针 | 2025-07-03 |