LeetCode-Book 题目分类图谱:《图解算法数据结构》75 道高频面试题的算法与数据结构全景解析 📅 发布时间:2026/9/16 14:41:39 👁 浏览次数: LeetCode-Book 题目分类图谱《图解算法数据结构》75 道高频面试题的算法与数据结构全景解析【免费下载链接】LeetCode-Book《剑指 Offer》《图解算法数据结构》《Krahets 笔面试精选 88 题》Python, Java, C 解题代码项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Book导读本文以《图解算法数据结构》专栏的官方题目分类表leetbook_ioa/docs/# 0.2 题目分类.md为核心完整梳理 LeetCode-Book 仓库中 75 道 LCR 高频面试题的最优解法分类。读者将掌握一套按算法 按数据结构双维度检索题目的方法并能将分类表与仓库内三语言Python / Java / C题解代码一一对应用于规划刷题路线、查缺补漏与面试前突击复习。一、这份分类表解决什么问题在 LeetCode-Book 仓库中leetbook_ioa目录对应《图解算法数据结构》即力扣剑指 Offer题单的 LeetBook 形态其中收录了 75 道活跃于各大互联网公司招聘的笔面试题目。官方配套文档 《引言》 明确指出笔者整理了题目分类和刷题计划让刷题有迹可循。分类表的核心设计原则在文档开头就给出了明确声明题目可能存在多种解法下表仅列举最优解法时间与空间复杂度最低的算法和数据结构分类。这句话包含两个关键信息最优解法定位分类不代表唯一解法而是标注时间/空间复杂度最优的那条路线。例如斐波那契数既可递归、也可记忆化递归但分类表只标动态规划因为动态规划在时间与空间上综合最优详见 LCR 126. 斐波那契数题解 中的递推与空间优化分析。双维度标签每道题同时标注算法分类怎么做与数据结构分类用什么载体二者组合构成题目的完整技术画像。这份分类表在仓库中的实际用途有三按知识点检索想练双指针就筛选算法列为双指针的行想练树就筛选数据结构列为树的行。刷题进度管理与 刷题建议 中每日 2~3 题、按目录顺序推进、多解法比较的方法配合形成闭环。复习地图面试前按分类快速过一遍每个知识点的代表性题目。二、完整题目分类总表以下为leetbook_ioa/docs/# 0.2 题目分类.md的完整分类表共 75 题按题号顺序排列内容与原文档完全一致题目算法分类数据结构分类寻找文件副本查找数组寻找目标值 - 二维数组查找数组路径加密字符串图书整理 I栈与队列链表推理二叉树分治树哈希表图书整理 II栈与队列斐波那契数动态规划数组跳跃训练动态规划数组库存管理 I查找数组字母迷宫回溯搜索数组图衣橱整理回溯搜索数组图砍竹子 I贪心数学砍竹子 II贪心分治数学位 1 的个数位运算Pow(x, n)分治位运算报数数组删除链表节点双指针链表模糊搜索验证动态规划字符串有效数字字符串训练计划 I双指针数组训练计划 II双指针链表训练计划 III双指针链表训练计划 IV双指针链表子结构判断搜索树翻转二叉树搜索栈与队列树判断对称二叉树搜索树螺旋遍历二维数组模拟数组最小栈排序栈与队列验证图书取出顺序模拟栈与队列彩灯装饰记录 I搜索栈与队列树彩灯装饰记录 II搜索栈与队列树彩灯装饰记录 III搜索栈与队列树验证二叉搜索树的后序遍历序列分治栈与队列树二叉树中和为目标值的路径回溯搜索树随机链表的复制链表将二叉搜索树转化为排序的双向链表搜索双指针树序列化与反序列化二叉树搜索树套餐内商品的排列顺序回溯字符串哈希表库存管理 II数组库存管理 III排序数组堆数据流中的中位数排序堆连续天数的最高销售额动态规划数组数字 1 的个数数学找到第 k 位数字数学破解闯关密码排序字符串解密数字动态规划字符串珠宝的最高价值动态规划数组招式拆解 I动态规划双指针哈希表丑数动态规划招式拆解 II哈希表交易逆序对的总数分治数组训练计划 V双指针链表统计目标成绩的出现次数查找数组点名查找数组寻找二叉搜索树中的目标节点搜索树计算二叉树的深度搜索树判断是否为平衡二叉树搜索树撞色搭配位运算数组训练计划 VI位运算数组查找总价格为目标值的两个商品双指针数组文件组合双指针数组字符串中的单词反转双指针字符串动态口令字符串望远镜中最高的海拔排序数组栈与队列设计自助结算系统排序数组栈与队列统计结果概率动态规划文物朝代判断排序数组哈希表破冰游戏数学买卖芯片的最佳时机动态规划数组设计机械累加器加密运算位运算按规则计算统计结果数学数组不使用库函数的字符串转整数字符串求二叉搜索树的最近公共祖先搜索树寻找二叉树的最近公共祖先搜索树从统计上看表中出现的算法标签包括查找、动态规划、分治、回溯、搜索、贪心、数学、位运算、双指针、排序、模拟共 11 类数据结构标签包括数组、字符串、栈与队列、链表、树、哈希表、图、堆共 8 类。这与 《引言》 中数据结构与算法专栏的章节规划基础复杂度知识 → 8 类数据结构 → 搜索与回溯、分治、动态规划、贪心、排序、位运算、模拟、数学等算法专题完全对应——分类表本质上是整个专栏知识地图的索引。三、按算法维度解读分类图谱3.1 查找数组检索的两个基本姿势分类表中查找类共 5 题寻找文件副本哈希/标记、寻找目标值 - 二维数组从右上角逐步收缩、库存管理 I旋转数组二分、统计目标成绩的出现次数排序数组二分、点名缺失数字二分。其中寻找目标值 - 二维数组对应 LCR 121的仓库实现位于 Python 代码其核心思路是从矩阵右上角出发利用行递增、列递增的特性每次排除一行或一列将暴力 $O(MN)$ 降到 $O(MN)$——这是查找类题目中最具代表性的空间换时间思维。3.2 双指针链表与有序数组的快慢艺术双指针是表中出现频次最高的算法标签之一覆盖三个子场景有序数组双指针查找总价格为目标值的两个商品对应 LCR 179仓库代码 lc_167_two_sum_ii.py、文件组合滑动双指针区间、训练计划 I奇偶分区。链表双指针删除链表节点、训练计划 II/III倒数第 k 个、反转、训练计划 IV合并两个排序链表仓库代码 lc_21_merge_two_sorted_lists.py、训练计划 V相交链表仓库代码 lc_160_intersection_of_two_linked_lists.py。字符串双指针字符串中的单词反转对应 LCR 181仓库提供三种解法 s1、s2、s3以及哈希表辅助的招式拆解 I无重复最长子串仓库代码 lc_3_longest_substring_without_repeating_characters_s1.py。注意训练计划系列I~VI横跨双指针、链表、位运算等标签可见它是对同一组链表/数组操作的变体训练非常适合作为双指针专项练习组。3.3 搜索与回溯树、图与路径枚举搜索是表中体量最大的标签主要分布在树结构上子结构判断、翻转二叉树、判断对称二叉树、彩灯装饰记录 I/II/III层序遍历三种变体、序列化与反序列化二叉树、寻找二叉搜索树中的目标节点、计算二叉树的深度、判断是否为平衡二叉树、最近公共祖先BST 与普通二叉树等。回溯搜索标签则指向路径枚举类问题字母迷宫对应 LCR 129即矩阵中的单词搜索、衣橱整理机器人运动范围、二叉树中和为目标值的路径、套餐内商品的排列顺序全排列。以字母迷宫为例官方题解 明确其本质是DFS 可行性剪枝递归参数为矩阵坐标(i, j)与目标字符索引k越界/字符不匹配/已访问即剪枝返回false匹配完整目标串即返回true搜索中先把当前格标记为空字符Java/C 为\0防止重复访问回溯时再还原。仓库中的 lc_79_word_search.py 即为该思路的 Python 实现。复杂度分析$O(3^K \cdot MN)$$K$ 为字符串长度也印证了每个字符最多有 3 个未访问方向的剪枝效果。3.4 分治从归并排序到递归构造分治标签共 5 题代表了分治思想的三种形态递归构造推理二叉树由前序中序重建二叉树仓库代码 lc_105_construct_binary_tree_from_preorder_and_inorder_traversal.py、验证二叉搜索树的后序遍历序列。快速幂Pow(x, n)分治 位运算仓库代码 lc_50_powx_n.py。归并统计交易逆序对的总数对应 LCR 170。官方题解 给出了最清晰的原理说明暴力统计数字对是 $O(N^2)$而 $N$ 可达 50000不可接受利用归并排序合并两个排序数组阶段——每当左子数组当前元素大于右子数组当前元素时左子数组当前元素至末尾的元素都与右子数组该元素构成逆序对一次性累加m - i 1个从而把复杂度降到 $O(N \log N)$。同主题在sword_for_offer侧也有对应文档 剑指 Offer 51. 数组中的逆序对两份文档可对照阅读。3.5 动态规划从递推到空间优化动态规划共 10 题是覆盖面最广的算法标签几乎覆盖 DP 的全部入门形态一维递推斐波那契数LCR 126仓库代码 lc_509_fibonacci_number.py、跳跃训练爬楼梯、连续天数的最高销售额最大子数组和仓库代码 lc_53_maximum_subarray.py、买卖芯片的最佳时机仓库代码 lc_121_best_time_to_buy_and_sell_stock.py。二维网格珠宝的最高价值网格最大路径和。字符串 DP模糊搜索验证正则匹配仓库代码 lc_10_regular_expression_matching_s1.py、解密数字数字翻译成字符串、招式拆解 I滑动窗口 哈希表本质是 DP 与双指针的融合。数论 DP丑数三指针递推仓库代码 lc_264_ugly_number_ii.py、统计结果概率n 个骰子的点数。以斐波那契数为例官方题解 依次比较了递归大量重复计算、记忆化递归$O(N)$ 额外空间、动态规划转移方程dp[i1] dp[i] dp[i-1]三种方案并给出关键优化由于第i项只依赖前两项可用a, b, sum三个变量滚动前进空间复杂度从 $O(N)$ 降至 $O(1)$。同时题解还演示了循环求余法利用(x y) mod p ((x mod p) (y mod p)) mod p在每轮循环中就对 $1000000007$ 取模避免大数越界——这是面试中答案对 1e97 取模类题目的标准处理手法。3.6 贪心与数学从证明到巧解砍竹子 I对应 LCR 131即整数拆分仓库代码 lc_343_integer_break.py同时挂了贪心数学两个标签其官方题解 给出了完整的数学推导链由算术几何均值不等式推出等分时乘积最大对 $y x^{1/x}$ 求导得到驻点 $x_0 e \approx 2.7$最接近的整数是 2 和 3代入比较得 $3^{1/3} 2^{1/2}$两边 6 次方得 9 8 可口算验证归纳出切分规则优先切 3余 1 时把31换成22因为 $2 \times 2 3 \times 1$余 2 时保留。最终算法流程为n 3时返回n - 1否则按n mod 3的三种余数情况返回3^a、3^(a-1) × 4或3^a × 2时间复杂度 $O(1)$。砍竹子 II在此基础上叠加大数取模算法标签额外增加分治用于快速幂取模。数学类还包括数字 1 的个数按位计数仓库代码 lc_233_number_of_digit_one_s1.py、找到第 k 位数字位数分段仓库代码 lc_400_nth_digit_s1.py、破冰游戏约瑟夫环仓库代码 lc_1823_find_the_winner_of_the_circular_game.py、按规则计算统计结果前缀乘积。3.7 位运算二进制视角的利器位运算共 5 题位 1 的个数、Pow(x, n)配合分治做快速幂、撞色搭配两个只出现一次的数字、训练计划 VI只出现一次的数字 II、加密运算不用加减乘除做加法仓库代码 lc_371_sum_of_two_integers.py。位 1 的个数对应 LCR 133的官方题解 提供了两种解法复杂度对比极具教学价值方法一逐位判断res n 1判断最右位n 1无符号右移。注意 Java 必须用无符号右移C 需声明uint32_tPython 无需考虑符号。时间复杂度 $O(\log_2 n)$。方法二n (n - 1)n - 1会把最右边的 1 变成 0、其后的 0 全变 1再与运算即可每轮消去一个 1。设 $M$ 为二进制中 1 的个数时间复杂度 $O(M)$当数字中 1 很少时优势明显。两种思路在仓库中分别对应 lc_191_number_of_1_bits_s1.py 与 lc_191_number_of_1_bits_s2.py这是一题多解、比较复杂度的典型范例。3.8 排序与模拟平凡思路背后的权衡排序类7 题看似平凡实则蕴含重要权衡数据流中的中位数用大小顶堆维持中位数仓库代码 lc_295_find_median_from_data_stream_s1.py、库存管理 III 用堆/快排选前 k 小、破解闯关密码本质是自定义比较器排序仓库代码 lc_179_largest_number_s1.py、文物朝代判断是排序后判连续、望远镜中最高的海拔与设计自助结算系统则是单调栈/单调队列借助有序性换取 $O(1)$ 取最值。以望远镜中最高的海拔对应 LCR 183即滑动窗口最大值为例官方题解 的推导链条非常经典暴力法每个窗口线性扫描是 $O(nk)$单调队列法通过维护非严格递减的双端队列队首始终是窗口最大值每个元素至多入队出队一次整体 $O(n)$。题解还对比了最小栈用单调栈取栈内最小值的思路指出两者唯一差异是滑动窗口删除的是队首元素而栈删除的是队尾元素——这一对照是理解单调数据结构的关键。仓库实现见 lc_239_sliding_window_maximum_s1.py合并式写法与 lc_239_sliding_window_maximum_s2.py拆分未形成窗口/已形成窗口两阶段减少冗余判断。模拟类2 题螺旋遍历二维数组边界收缩仓库代码 lc_54_spiral_matrix.py、验证图书取出顺序栈模拟压入弹出仓库代码 lc_946_validate_stack_sequences.py。这类题算法标签为空或很轻但数据结构标签数组、栈与队列提示了实现载体适合作为读题 状态维护的训练。四、按数据结构维度解读分类图谱数组最大的数据结构标签几乎所有算法类别都有数组载体。特别值得注意的是库存管理 I旋转数组找最小仓库代码 lc_154_find_minimum_in_rotated_sorted_array_ii_s1.py这类数组 查找组合——数组的有序/局部有序性质是二分查找的前提。字符串路径加密、动态口令等标签为空的题目其实对应字符串的库函数操作替换空格、左旋转属于热身题而模糊搜索验证、有效数字仓库代码 lc_65_valid_number.py、不使用库函数的字符串转整数仓库代码 lc_8_string_to_integer_atoi_s1.py则是状态机/边界处理的进阶题。链表训练计划 II/III/IV/V、删除链表节点、随机链表的复制仓库提供 s1~s5 共五种解法、图书整理 I从尾到头打印。链表题天然与双指针绑定是指针操作训练主阵地。栈与队列图书整理 II用栈实现队列仓库代码 lc_232_implement_queue_using_stacks.py、最小栈仓库代码 lc_155_min_stack.py、彩灯装饰记录 I/II/III层序遍历的三种输出形态对应仓库 lc_102_binary_tree_level_order_traversal.py 与 lc_103 系列、望远镜中最高的海拔与设计自助结算系统单调队列/单调栈。树占比最高的数据结构标签横跨搜索、分治、双指针、回溯。递归是树操作的基本功而彩灯装饰记录系列则展示 BFS队列与 DFS栈/递归在同一批题目上的应用差异。图仅两题——字母迷宫、衣橱整理均为数组 图的网格图 DFS/BFS 问题是图论入门的最佳切口。堆库存管理 III、数据流中的中位数对应前 k 小/大流式中位数两大堆的经典应用。哈希表推理二叉树用哈希表加速中序定位、套餐内商品的排列顺序去重、招式拆解 I/II窗口与计数、文物朝代判断判重。值得注意的是分类表中若干算法分类为空的题目如路径加密、报数、随机链表的复制、设计机械累加器并不意味着简单——随机链表的复制在仓库中有 5 种解法设计机械累加器剑指 Offer 64 求 12…n则禁止使用乘除法与循环靠短路求值递归实现是典型的限制条件下的技巧题。五、分类统计与刷题路线建议5.1 从分类表反推的复习权重基于上表可做初步统计以下数字均从分类表直接计数得出供规划参考搜索类含搜索回溯搜索回溯约 20 题是绝对主力其中绝大多数落在树结构上——树 递归/DFS/BFS 是这套题库的第一优先级动态规划10 题覆盖递推、网格、字符串、数论四种形态建议按形态分组练习双指针约 12 题其中链表双指针与有序数组双指针可分别成组位运算5 题、数学/贪心8 题、排序7 题、查找5 题、分治5 题、模拟2 题。5.2 与仓库内刷题建议的配合刷题建议 给出的方法论与本分类表天然互补每日 2~3 题质量优先于数量分类表可用来确保每天覆盖不同标签避免连续多天只练同一类题。按目录顺序推进难题先跳过分类表中标签为空的热身题路径加密、动态口令、报数等适合入门期打底再逐步进入搜索、DP、位运算等核心区。多解法比较分类表只列最优解但仓库代码目录中大量题目提供了_s1、_s2…多个版本如随机链表复制 5 解、位 1 的个数 2 解、滑动窗口最大值 2 解正好用来实践比较各种方法的特点和适用情况。间隔复习建议 ≥3 次复习才能牢固掌握知识点分类表即是天然的复习清单。5.3 跨目录对照LCR 题号与剑指 Offer 的映射本分类表中的 LCR 题目与《剑指 Offer》题目一一对应LCR 编号即剑指 Offer 题目的重构编号仓库的sword_for_offer目录提供了对应文档例如交易逆序对的总数 ↔ 剑指 Offer 51. 数组中的逆序对、望远镜中最高的海拔 ↔ 剑指 Offer 59 - I. 滑动窗口的最大值、不使用库函数的字符串转整数 ↔ 剑指 Offer 67. 把字符串转换成整数。需要查找某题时可先在本分类表定位标签再到两个题解目录中交叉检索。六、在仓库中如何检索与学习6.1 目录结构约定根据 README.md 的说明仓库按三套内容组织LeetCode-Book ├── leetbook_ioa # 《图解算法数据结构》题解和专栏文档 ├── selected_coding_interview # 《Krahets 笔面试精选 88 题》题解文档 └── sword_for_offer # 《剑指 Offer》题解文档、代码、刷题计划本分类表所在的leetbook_ioa/docs/目录同时存放两类文件# 0~# 11系列专栏文档数据结构简介、算法复杂度、排序算法、动态规划框架等以及每道 LCR 题目的题解文档如 LCR 126. 斐波那契数.md。6.2 三语言代码与数据结构封装selected_coding_interview/codes/与sword_for_offer/codes/下按python / java / cpp三语言组织代码每道题一个目录Python 为平铺单文件Java/C 每题一个子目录命名统一为lc_题号_题目名[_s方案号]或sfo_题号_...。include/目录提供常用数据结构封装如链表、二叉树节点的定义配合题解文档的class Solution代码即可在本地复现运行。6.3 建议的学习路径先读专栏基础文档数据结构简介、算法复杂度建立复杂度概念以本分类表为索引按数组热身 → 链表双指针 → 树与搜索 → 动态规划 → 位运算/数学的梯度刷题每道题先读leetbook_ioa/docs/对应题解理解思路与复杂度再对照selected_coding_interview/codes/python/或sword_for_offer/codes/下的多方案代码实践一题多解面试冲刺阶段按算法标签搜索、DP、双指针…快速过一遍分类表确保每个知识点都有代表题可讲。综上这份 75 题的分类表既是《图解算法数据结构》专栏的知识索引也是 LeetCode-Book 仓库的导航地图——它将抽象的算法与数据结构概念落实到具体题目又与仓库内的三语言题解代码一一呼应是刷题规划、知识检索与面试复习的高效起点。【免费下载链接】LeetCode-Book《剑指 Offer》《图解算法数据结构》《Krahets 笔面试精选 88 题》Python, Java, C 解题代码项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Book创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考