LeetCode 75 学习计划清单和参考答案

LeetCode 75 学习计划精选 75 道经典算法题目,涵盖字符串、数组、散列、双指针、链表、树、图和动态规划等核心主题。它不仅帮助初学者快速掌握常用算法与数据结构,也能让有经验的程序员系统复习、查漏补缺。这里一次性提供针对此学习计划的进度清单和全部 75 道题的参考答案。

天天刷题,失业远离;每日力扣,工作招手。

计划概述

力扣官网给出的 LeetCode 75 学习计划的概述:

  • 精选面试必备的 75 道核心题目
  • 完整面试知识点辅以逐步深入的学习顺序
  • 配合抓重点式题目练习高效准备面试
  • 适合需要在 3 个月以内准备面试的用户

此学习计划包含的 75 道题目的难度分布是

  • \(\mathrm{\color{green}{简单}}\):22
  • \(\mathrm{\color{orange}{中等}}\):53
  • \(\mathrm{\color{red}{困难}}\):0

由此可见,它没有难度为困难级别的题目,很适合大专院校的在校生为申请软件实习生的职位做准备。

进度清单

针对此学习计划,笔者制作了一个进度清单(示例如下)

# 题号 标题 分组 标签 提示 难度 完成
1 1768 交替合并字符串 数组/字符串 双指针, 字符串 使用两个指针遍历两个字符串 \(\mathrm{\color{green}{简单}}\)
2 1071 字符串的最大公因子 数组/字符串 字符串, 数学 使用字符串拼接和最大公因子思想 \(\mathrm{\color{green}{简单}}\)

学习建议

根据笔者的经验,如果有比较好的编程经验和算法功底,实际上累计 80 个小时的刷题及复习时间也应该够了。参见上面的进度清单,笔者还给出下面的建议

  • 用复选框追踪进度
  • 设置每日/每周目标
  • 用提示栏作为思路参考,避免直接看答案
  • 注重每组题型的解题模式
  • 复习题解并优化时间/空间复杂度
  • 每完成一组后回顾总结
  • 定期回顾已做题目,巩固理解

参考答案

下面的表格列出了笔者搜集、整理和验证的全部 75 道题的参考答案。多数是基于 Python 语言编写,一小部分用 C 语言实现。所有程序都有解释相应关键算法步骤和时间/空间复杂度的注释,绝大多数代码还包含了基本的测试用例。欢迎读者在评论区留言讨论和批评指正。

# 题号 标题 分组 标签 提示 难度 答案
1 1768 交替合并字符串 数组/字符串 双指针, 字符串 使用两个指针遍历两个字符串 \(\mathrm{\color{green}{简单}}\) Python
2 1071 字符串的最大公因子 数组/字符串 字符串, 数学 使用字符串拼接和最大公因子思想 \(\mathrm{\color{green}{简单}}\) Python
3 1431 拥有最多糖果的孩子 数组/字符串 数组, 贪心 先找最大糖果数,再遍历每个孩子 \(\mathrm{\color{green}{简单}}\) Python
4 605 种花问题 数组/字符串 数组, 贪心 放花前检查相邻位置 \(\mathrm{\color{green}{简单}}\) Python
5 345 反转字符串中的元音字母 数组/字符串 双指针, 字符串 使用双指针从两端遍历 \(\mathrm{\color{green}{简单}}\) Python
6 151 翻转字符串里的单词 数组/字符串 双指针, 字符串 按空格分割并反转顺序 \(\mathrm{\color{orange}{中等}}\) Python
7 238 除自身以外数组的乘积 数组/字符串 数组, 前缀和 使用左右乘积数组 \(\mathrm{\color{orange}{中等}}\) Python
8 334 递增的三元子序列 数组/字符串 数组, 贪心 记录最小和次小值 \(\mathrm{\color{orange}{中等}}\) Python
9 443 压缩字符串 数组/字符串 双指针, 字符串 统计连续字符 \(\mathrm{\color{orange}{中等}}\) Python
10 283 移动零 双指针 数组, 双指针 用写指针放非零元素 \(\mathrm{\color{green}{简单}}\) Python
11 392 判断子序列 双指针 双指针, 字符串, 动态规划 用双指针匹配字符 \(\mathrm{\color{green}{简单}}\) Python
12 11 盛最多水的容器 双指针 数组, 双指针, 贪心 从两端开始,移动较短的线 \(\mathrm{\color{orange}{中等}}\) Python
13 1679 和为 K 的数对最大数目 双指针 数组, 哈希表, 双指针 排序或用哈希表 \(\mathrm{\color{orange}{中等}}\) Python
14 643 子数组最大平均数 I 滑动窗口 数组, 滑动窗口 使用大小为 k 的滑动窗口 \(\mathrm{\color{green}{简单}}\) Python
15 1456 定长子串中元音的最大数目 滑动窗口 字符串, 滑动窗口 滑动窗口统计元音数 \(\mathrm{\color{orange}{中等}}\) Python
16 1004 最大连续 1 的个数 III 滑动窗口 数组, 二分, 滑动窗口, 前缀和 滑动窗口最多包含 k 个零 \(\mathrm{\color{orange}{中等}}\) Python
17 1493 删掉一个元素以后全为 1 的最长子数组 滑动窗口 数组, 二分, 滑动窗口 窗口最多允许一个零 \(\mathrm{\color{orange}{中等}}\) Python
18 1732 找到最高海拔 前缀和 数组, 前缀和 记录累计海拔 \(\mathrm{\color{green}{简单}}\) Python
19 724 寻找数组的中心下标 前缀和 数组, 前缀和 判断左右和是否相等 \(\mathrm{\color{green}{简单}}\) Python
20 2215 找出两数组的不同 哈希表/集合 数组, 哈希表 用集合找唯一元素 \(\mathrm{\color{green}{简单}}\) Python
21 1207 独一无二的出现次数 哈希表/集合 数组, 哈希表 统计频率并判断唯一性 \(\mathrm{\color{green}{简单}}\) Python
22 1657 判断两个字符串是否接近 哈希表/集合 哈希表, 字符串, 排序 判断字符集和频率模式 \(\mathrm{\color{orange}{中等}}\) Python
23 2352 相等行列对 哈希表/集合 数组, 哈希表, 矩阵, 模拟 行列转为可比较格式 \(\mathrm{\color{orange}{中等}}\) Python
24 2390 从字符串中移除星号 字符串, 栈, 模拟 用栈处理星号移除 \(\mathrm{\color{orange}{中等}}\) Python
25 735 行星碰撞 数组, 栈, 模拟 用栈模拟碰撞 \(\mathrm{\color{orange}{中等}}\) Python
26 394 字符串解码 字符串, 栈, 递归 用栈处理嵌套括号 \(\mathrm{\color{orange}{中等}}\) Python
27 933 最近的请求次数 队列 设计, 队列, 数据流 用队列维护时间窗口 \(\mathrm{\color{green}{简单}}\) Python
28 649 Dota2 参议院 队列 字符串, 贪心, 队列 用两个队列分别存储两党 \(\mathrm{\color{orange}{中等}}\) Python
29 2095 删除链表的中间节点 链表 链表, 双指针 快慢指针找中间节点 \(\mathrm{\color{orange}{中等}}\) C
30 328 奇偶链表 链表 链表 分离奇偶位置节点 \(\mathrm{\color{orange}{中等}}\) C
31 206 反转链表 链表 链表, 递归 迭代或递归反转 \(\mathrm{\color{green}{简单}}\) C
32 2130 链表最大孪生和 链表 链表, 双指针, 栈 找中点,反转后半部分 \(\mathrm{\color{orange}{中等}}\) C
33 104 二叉树的最大深度 二叉树-DFS 树, DFS, BFS, 二叉树 递归或层序遍历 \(\mathrm{\color{green}{简单}}\) C
34 872 叶子相似的树 二叉树-DFS 树, DFS, 二叉树 比较叶子序列 \(\mathrm{\color{green}{简单}}\) Python
35 1448 统计二叉树中好节点的数目 二叉树-DFS 树, DFS, 二叉树 路径中记录最大值 \(\mathrm{\color{orange}{中等}}\) C
36 437 路径总和 III 二叉树-DFS 树, DFS, 二叉树 用前缀和 DFS \(\mathrm{\color{orange}{中等}}\) C
37 1372 二叉树中的最长交错路径 二叉树-DFS 动态规划, 树, DFS, 二叉树 记录方向和长度 \(\mathrm{\color{orange}{中等}}\) C
38 236 二叉树的最近公共祖先 二叉树-DFS 树, DFS, 二叉树 递归查找 \(\mathrm{\color{orange}{中等}}\) C
39 199 二叉树的右视图 二叉树-BFS 树, DFS, BFS, 二叉树 层序遍历 \(\mathrm{\color{orange}{中等}}\) Python
40 1161 最大层内元素和 二叉树-BFS 树, BFS, 二叉树 层序遍历统计和 \(\mathrm{\color{orange}{中等}}\) Python
41 700 二叉搜索树中的搜索 二叉搜索树 树, 二叉搜索树, 二叉树 利用 BST 性质高效查找 \(\mathrm{\color{green}{简单}}\) C
42 450 删除二叉搜索树中的节点 二叉搜索树 树, 二叉搜索树, 二叉树 处理三种情况:叶子、单子节点、双子节点 \(\mathrm{\color{orange}{中等}}\) C
43 841 钥匙和房间 图-DFS DFS, BFS, 图 DFS/BFS 遍历所有可达房间 \(\mathrm{\color{orange}{中等}}\) Python
44 547 省份数量 图-DFS DFS, BFS, 并查集, 图 统计连通分量 \(\mathrm{\color{orange}{中等}}\) Python
45 1466 重新规划路线 图-DFS DFS, BFS, 图 统计需要反转的边 \(\mathrm{\color{orange}{中等}}\) Python
46 399 除法求值 图-DFS 数组, DFS, BFS, 并查集, 图, 最短路 构建加权图,DFS 查询 \(\mathrm{\color{orange}{中等}}\) Python
47 1926 迷宫中离入口最近的出口 图-BFS 数组, BFS, 矩阵 BFS 找到最近出口 \(\mathrm{\color{orange}{中等}}\) Python
48 994 腐烂的橘子 图-BFS 数组, BFS, 矩阵 多源 BFS 模拟 \(\mathrm{\color{orange}{中等}}\) Python
49 215 数组中的第K个最大元素 堆/优先队列 数组, 分治, 排序, 堆, 快速选择 用大小为 k 的小顶堆或快排 \(\mathrm{\color{orange}{中等}}\) Python
50 2336 无限集中的最小数字 堆/优先队列 哈希表, 设计, 堆 用小顶堆和集合维护 \(\mathrm{\color{orange}{中等}}\) Python
51 2542 最大子序列分数 堆/优先队列 数组, 贪心, 排序, 堆 一维排序,另一维用堆 \(\mathrm{\color{orange}{中等}}\) Python
52 2462 雇佣 K 名工人的总成本 堆/优先队列 数组, 双指针, 模拟, 堆 两端各用一个堆 \(\mathrm{\color{orange}{中等}}\) Python
53 374 猜数字大小 二分查找 二分查找, 交互, 游戏 标准二分查找模板 \(\mathrm{\color{green}{简单}}\) Python
54 2300 咒语和药水的成功对数 二分查找 数组, 双指针, 二分查找, 排序 药水排序,咒语二分查找 \(\mathrm{\color{orange}{中等}}\) Python
55 162 寻找峰值 二分查找 数组, 二分查找 二分查找与邻居比较 \(\mathrm{\color{orange}{中等}}\) Python
56 875 爱吃香蕉的珂珂 二分查找 数组, 二分查找 二分查找吃香蕉速度 \(\mathrm{\color{orange}{中等}}\) Python
57 17 电话号码的字母组合 回溯 哈希表, 字符串, 回溯 DFS + 数字到字母映射 \(\mathrm{\color{orange}{中等}}\) Python
58 216 组合总和 III 回溯 数组, 回溯 回溯满足和与数量限制 \(\mathrm{\color{orange}{中等}}\) Python
59 1137 第 N 个泰波那契数 动态规划-一维 数学, 动态规划, 记忆化 迭代或记忆化递归 \(\mathrm{\color{green}{简单}}\) Python
60 746 使用最小花费爬楼梯 动态规划-一维 数组, 动态规划 选择最小花费路径 \(\mathrm{\color{green}{简单}}\) Python
61 198 打家劫舍 动态规划-一维 数组, 动态规划 不抢相邻房屋最大收益 \(\mathrm{\color{orange}{中等}}\) Python
62 790 多米诺和托米诺平铺 动态规划-一维 动态规划 不同铺法状态转移 \(\mathrm{\color{orange}{中等}}\) Python
63 62 不同路径 动态规划-多维 数学, 动态规划, 组合数学 DP 或组合数学 \(\mathrm{\color{orange}{中等}}\) Python
64 1143 最长公共子序列 动态规划-多维 字符串, 动态规划 构建二维 DP 表 \(\mathrm{\color{orange}{中等}}\) Python
65 714 买卖股票的最佳时机含手续费 动态规划-多维 数组, 动态规划, 贪心 记录持有和卖出状态 \(\mathrm{\color{orange}{中等}}\) Python
66 72 编辑距离 动态规划-多维 字符串, 动态规划 经典编辑距离 DP \(\mathrm{\color{orange}{中等}}\) Python
67 338 比特位计数 位运算 动态规划, 位运算 利用位运算性质 \(\mathrm{\color{green}{简单}}\) Python
68 136 只出现一次的数字 位运算 数组, 位运算 利用异或性质 \(\mathrm{\color{green}{简单}}\) Python
69 1318 使 a 或 b 等于 c 的最少翻转次数 位运算 位运算 检查每一位 \(\mathrm{\color{orange}{中等}}\) C
70 208 实现 Trie (前缀树) Trie 哈希表, 字符串, 设计, Trie 用嵌套哈希表或数组实现 \(\mathrm{\color{orange}{中等}}\) Python
71 1268 搜索推荐系统 Trie 数组, 字符串, Trie 构建 Trie,遍历前缀 \(\mathrm{\color{orange}{中等}}\) Python
72 435 无重叠区间 区间 数组, 动态规划, 贪心, 排序 按结束时间排序,贪心选择 \(\mathrm{\color{orange}{中等}}\) Python
73 452 用最少数量的箭引爆气球 区间 数组, 贪心, 排序 按区间排序,统计不重叠区间 \(\mathrm{\color{orange}{中等}}\) Python
74 739 每日温度 单调栈 数组, 栈, 单调栈 使用单调递减栈 \(\mathrm{\color{orange}{中等}}\) Python
75 901 股票价格跨度 单调栈 栈, 设计, 单调栈, 数据流 栈存储(价格, 跨度)对 \(\mathrm{\color{orange}{中等}}\) Python