# LeetCode Hot 100 + 蓝桥杯备战计划 > 📅 制定时间:2026-03-17 > 🎯 目标:蓝桥杯省赛 + 面试基础 > 📚 题源:LeetCode 官方 Hot 100 > ⏰ 周期:4 周冲刺 --- ## 📊 整体规划 | 周次 | 重点题型 | 题目数 | 蓝桥杯考点 | 预计时间 | |------|----------|--------|------------|----------| | 第 1 周 | 数组/字符串/哈希 | 35 题 | ⭐⭐⭐ | 20-25 小时 | | 第 2 周 | 动态规划 | 15 题 | ⭐⭐⭐ | 15-20 小时 | | 第 3 周 | 树/回溯/图论 | 35 题 | ⭐⭐⭐ | 20-25 小时 | | 第 4 周 | 其他 + 真题模拟 | 15 题 + 真题 | ⭐⭐⭐ | 15-20 小时 | --- ## 第 1 周:数组/字符串/哈希(3.17-3.23) ### 📌 重点考点 - 双指针技巧 - 前缀和与差分 - 滑动窗口 - 哈希表应用 - 字符串处理 ### 📋 题目清单 #### 数组(15 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 1 | 两数之和 | 简单 | 哈希表 | □ | | 11 | 盛最多水的容器 | 中等 | 双指针 | □ | | 15 | 三数之和 | 中等 | 排序 + 双指针 | □ | | 26 | 删除有序数组中的重复项 | 简单 | 双指针 | □ | | 27 | 移除元素 | 简单 | 双指针 | □ | | 42 | 接雨水 | 困难 | 单调栈/双指针 | □ | | 48 | 旋转图像 | 中等 | 矩阵变换 | □ | | 53 | 最大子数组和 | 中等 | 动态规划 | □ | | 56 | 合并区间 | 中等 | 排序 + 区间 | □ | | 73 | 矩阵置零 | 中等 | 原地算法 | □ | | 88 | 合并两个有序数组 | 简单 | 双指针 | □ | | 128 | 最长连续序列 | 中等 | 哈希表 | □ | | 152 | 乘积最大子数组 | 中等 | 动态规划 | □ | | 169 | 多数元素 | 简单 | 摩尔投票 | □ | | 189 | 轮转数组 | 中等 | 数组翻转 | □ | | 215 | 数组中的第 K 个最大元素 | 中等 | 快速选择/堆 | □ | | 238 | 除自身以外数组的乘积 | 中等 | 前缀和 | □ | | 283 | 移动零 | 简单 | 双指针 | □ | | 287 | 寻找重复数 | 中等 | 快慢指针 | □ | | 347 | 前 K 个高频元素 | 中等 | 哈希 + 堆 | □ | | 448 | 找到所有数组中消失的数字 | 简单 | 原地哈希 | □ | | 560 | 和为 K 的子数组 | 中等 | 前缀和 + 哈希 | □ | | 739 | 每日温度 | 中等 | 单调栈 | □ | #### 字符串(10 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 3 | 无重复字符的最长子串 | 中等 | 滑动窗口 | □ | | 5 | 最长回文子串 | 中等 | 中心扩散/DP | □ | | 10 | 正则表达式匹配 | 困难 | 动态规划 | □ | | 17 | 电话号码的字母组合 | 中等 | 回溯 | □ | | 22 | 括号生成 | 中等 | 回溯 | □ | | 49 | 字母异位词分组 | 中等 | 哈希表 | □ | | 139 | 单词拆分 | 中等 | 字符串 DP | □ | | 200 | 岛屿数量 | 中等 | DFS | □ | | 236 | 二叉树的最近公共祖先 | 中等 | 递归 | □ | | 394 | 字符串解码 | 中等 | 栈 | □ | #### 哈希表(8 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 1 | 两数之和 | 简单 | 哈希表 | □ | | 49 | 字母异位词分组 | 中等 | 哈希表 | □ | | 94 | 二叉树的中序遍历 | 简单 | 哈希 + 遍历 | □ | | 128 | 最长连续序列 | 中等 | 哈希表 | □ | | 136 | 只出现一次的数字 | 简单 | 位运算 | □ | | 169 | 多数元素 | 简单 | 哈希表/摩尔投票 | □ | | 217 | 存在重复元素 | 简单 | 哈希表 | □ | | 347 | 前 K 个高频元素 | 中等 | 哈希 + 堆 | □ | | 380 | O(1) 时间插入、删除和获取随机元素 | 中等 | 哈希 + 数组 | □ | | 454 | 四数相加 II | 中等 | 哈希表 | □ | ### 💻 必背模板 ```python # 1. 双指针模板 def two_pointers(nums): left, right = 0, len(nums) - 1 while left < right: # 处理逻辑 left += 1 right -= 1 # 2. 前缀和模板 def prefix_sum(nums): n = len(nums) prefix = [0] * (n + 1) for i in range(n): prefix[i + 1] = prefix[i] + nums[i] return prefix # 3. 滑动窗口模板 def sliding_window(s): left = 0 window = {} for right in range(len(s)): # 扩大窗口 window[s[right]] = window.get(s[right], 0) + 1 # 收缩窗口 while 条件: window[s[left]] -= 1 left += 1 # 4. 哈希表计数模板 def hash_count(nums): count = {} for num in nums: count[num] = count.get(num, 0) + 1 return count ``` ### 📅 每日安排 | 日期 | 题目 | 数量 | 笔记 | |------|------|------|------| | 3.17 | 数组(简单) | 5 题 | □ | | 3.18 | 数组(中等) | 5 题 | □ | | 3.19 | 数组(中等 + 困难) | 5 题 | □ | | 3.20 | 字符串 | 5 题 | □ | | 3.21 | 哈希表 | 5 题 | □ | | 3.22 | 复习错题 | 10 题 | □ | | 3.23 | 模拟测试 | 5 题 | □ | --- ## 第 2 周:动态规划(3.24-3.30) ### 📌 重点考点 - 线性 DP - 区间 DP - 背包问题 - 状态机 DP - 数位 DP ### 📋 题目清单 | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 5 | 最长回文子串 | 中等 | 区间 DP | □ | | 10 | 正则表达式匹配 | 困难 | 字符串 DP | □ | | 32 | 最长有效括号 | 困难 | 栈+DP | □ | | 45 | 跳跃游戏 II | 中等 | 贪心+DP | □ | | 53 | 最大子数组和 | 中等 | 线性 DP | □ | | 55 | 跳跃游戏 | 中等 | 贪心+DP | □ | | 62 | 不同路径 | 中等 | 二维 DP | □ | | 64 | 最小路径和 | 中等 | 二维 DP | □ | | 70 | 爬楼梯 | 简单 | 线性 DP | □ | | 96 | 不同的二叉搜索树 | 中等 | 区间 DP | □ | | 121 | 买卖股票的最佳时机 | 简单 | 状态机 DP | □ | | 139 | 单词拆分 | 中等 | 字符串 DP | □ | | 152 | 乘积最大子数组 | 中等 | 线性 DP | □ | | 198 | 打家劫舍 | 中等 | 线性 DP | □ | | 213 | 打家劫舍 II | 中等 | 环形 DP | □ | | 221 | 最大正方形 | 中等 | 二维 DP | □ | | 300 | 最长递增子序列 | 中等 | 线性 DP | □ | | 309 | 最佳买卖股票时机含冷冻期 | 中等 | 状态机 DP | □ | | 322 | 零钱兑换 | 中等 | 完全背包 | □ | | 338 | 比特位计数 | 简单 | 数位 DP | □ | | 416 | 分割等和子集 | 中等 | 0-1 背包 | □ | | 509 | 斐波那契数 | 简单 | 线性 DP | □ | ### 💻 必背模板 ```python # 1. 线性 DP 模板 def linear_dp(n): dp = [0] * (n + 1) dp[0] = 1 for i in range(1, n + 1): dp[i] = dp[i-1] + dp[i-2] # 根据状态转移方程修改 return dp[n] # 2. 二维 DP 模板 def dp_2d(m, n): dp = [[0] * n for _ in range(m)] for i in range(m): for j in range(n): dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j] return dp[m-1][n-1] # 3. 0-1 背包模板 def knapsack_01(weights, values, capacity): n = len(weights) dp = [[0] * (capacity + 1) for _ in range(n + 1)] for i in range(1, n + 1): for j in range(capacity + 1): dp[i][j] = dp[i-1][j] if j >= weights[i-1]: dp[i][j] = max(dp[i][j], dp[i-1][j-weights[i-1]] + values[i-1]) return dp[n][capacity] # 4. 完全背包模板 def knapsack_complete(weights, values, capacity): dp = [0] * (capacity + 1) for i in range(len(weights)): for j in range(weights[i], capacity + 1): dp[j] = max(dp[j], dp[j-weights[i]] + values[i]) return dp[capacity] # 5. 区间 DP 模板 def interval_dp(s): n = len(s) dp = [[0] * n for _ in range(n)] for length in range(2, n + 1): # 枚举区间长度 for i in range(n - length + 1): j = i + length - 1 for k in range(i, j): dp[i][j] = max(dp[i][j], dp[i][k] + dp[k+1][j] + cost) return dp[0][n-1] ``` ### 📅 每日安排 | 日期 | 题目 | 数量 | 笔记 | |------|------|------|------| | 3.24 | 线性 DP | 5 题 | □ | | 3.25 | 二维 DP | 5 题 | □ | | 3.26 | 背包问题 | 5 题 | □ | | 3.27 | 状态机 DP | 5 题 | □ | | 3.28 | 区间 DP | 5 题 | □ | | 3.29 | 复习错题 | 10 题 | □ | | 3.30 | 模拟测试 | 5 题 | □ | --- ## 第 3 周:树/回溯/图论(3.31-4.6) ### 📌 重点考点 - 二叉树遍历 - 树形 DP - 回溯算法 - DFS/BFS - 拓扑排序 - 并查集 ### 📋 题目清单 #### 二叉树(15 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 94 | 二叉树的中序遍历 | 简单 | 递归/迭代 | □ | | 98 | 验证二叉搜索树 | 中等 | BST 性质 | □ | | 101 | 对称二叉树 | 简单 | 递归 | □ | | 102 | 二叉树的层序遍历 | 中等 | BFS | □ | | 104 | 二叉树的最大深度 | 简单 | DFS | □ | | 105 | 从前序与中序遍历序列构造二叉树 | 中等 | 树的构造 | □ | | 114 | 二叉树展开为链表 | 中等 | 树的变换 | □ | | 124 | 二叉树中的最大路径和 | 困难 | 树形 DP | □ | | 199 | 二叉树的右视图 | 中等 | BFS | □ | | 226 | 翻转二叉树 | 简单 | 递归 | □ | | 230 | 二叉搜索树中第 K 小的元素 | 中等 | 中序遍历 | □ | | 236 | 二叉树的最近公共祖先 | 中等 | 递归 | □ | | 437 | 路径总和 III | 中等 | 前缀和+DFS | □ | | 543 | 二叉树的直径 | 简单 | 树形 DP | □ | | 572 | 另一棵树的子树 | 简单 | 递归 | □ | #### 回溯(10 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 17 | 电话号码的字母组合 | 中等 | 回溯 | □ | | 22 | 括号生成 | 中等 | 回溯 | □ | | 39 | 组合总和 | 中等 | 回溯 | □ | | 40 | 组合总和 II | 中等 | 回溯 + 去重 | □ | | 46 | 全排列 | 中等 | 回溯 | □ | | 47 | 全排列 II | 中等 | 回溯 + 去重 | □ | | 78 | 子集 | 中等 | 回溯 | □ | | 79 | 单词搜索 | 中等 | 回溯+DFS | □ | | 93 | 复原 IP 地址 | 中等 | 回溯 | □ | | 131 | 分割回文串 | 中等 | 回溯 | □ | #### 图论(10 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 200 | 岛屿数量 | 中等 | DFS/BFS | □ | | 207 | 课程表 | 中等 | 拓扑排序 | □ | | 208 | 实现 Trie 前缀树 | 中等 | Trie 树 | □ | | 210 | 课程表 II | 中等 | 拓扑排序 | □ | | 547 | 省份数量 | 中等 | 并查集/DFS | □ | | 739 | 每日温度 | 中等 | 单调栈 | □ | | 763 | 划分字母区间 | 中等 | 贪心 | □ | | 785 | 判断二分图 | 中等 | BFS/DFS | □ | | 994 | 腐烂的橘子 | 中等 | BFS | □ | | 1143 | 最长公共子序列 | 中等 | 二维 DP | □ | ### 💻 必背模板 ```python # 1. DFS 模板 def dfs(graph, node, visited): visited.add(node) for neighbor in graph[node]: if neighbor not in visited: dfs(graph, neighbor, visited) # 2. BFS 模板 def bfs(graph, start): queue = deque([start]) visited = {start} while queue: node = queue.popleft() for neighbor in graph[node]: if neighbor not in visited: visited.add(neighbor) queue.append(neighbor) # 3. 回溯模板 def backtrack(path, choices): if 满足结束条件: result.append(path[:]) return for choice in choices: if 不合法: continue path.append(choice) backtrack(path, new_choices) path.pop() # 4. 二叉树遍历模板 def traverse(root): if not root: return # 前序:处理 root traverse(root.left) # 中序:处理 root traverse(root.right) # 后序:处理 root # 5. 并查集模板 class UnionFind: def __init__(self, n): self.parent = list(range(n)) def find(self, x): if self.parent[x] != x: self.parent[x] = self.find(self.parent[x]) return self.parent[x] def union(self, x, y): self.parent[self.find(x)] = self.find(y) ``` ### 📅 每日安排 | 日期 | 题目 | 数量 | 笔记 | |------|------|------|------| | 3.31 | 二叉树(遍历) | 5 题 | □ | | 4.1 | 二叉树(应用) | 5 题 | □ | | 4.2 | 回溯(排列组合) | 5 题 | □ | | 4.3 | 回溯(搜索) | 5 题 | □ | | 4.4 | 图论(DFS/BFS) | 5 题 | □ | | 4.5 | 图论(拓扑/并查集) | 5 题 | □ | | 4.6 | 复习错题 | 10 题 | □ | --- ## 第 4 周:其他 + 真题模拟(4.7-4.13) ### 📌 重点考点 - 链表 - 栈/队列 - 贪心算法 - 二分查找 - 滑动窗口 - 排序算法 - 蓝桥杯真题 ### 📋 题目清单 #### 链表(10 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 2 | 两数相加 | 中等 | 链表遍历 | □ | | 19 | 删除链表的倒数第 N 个结点 | 中等 | 快慢指针 | □ | | 21 | 合并两个有序链表 | 简单 | 归并 | □ | | 23 | 合并 K 个升序链表 | 困难 | 分治 + 堆 | □ | | 24 | 两两交换链表中的节点 | 中等 | 指针操作 | □ | | 61 | 旋转链表 | 中等 | 快慢指针 | □ | | 92 | 反转链表 II | 中等 | 指针操作 | □ | | 141 | 环形链表 | 简单 | 快慢指针 | □ | | 142 | 环形链表 II | 中等 | 快慢指针 | □ | | 148 | 排序链表 | 中等 | 归并排序 | □ | | 160 | 相交链表 | 简单 | 双指针 | □ | | 206 | 反转链表 | 简单 | 指针操作 | □ | | 234 | 回文链表 | 简单 | 快慢指针 + 反转 | □ | #### 贪心/二分/其他(15 题) | 题号 | 题目 | 难度 | 核心考点 | 完成 | |------|------|------|----------|------| | 4 | 寻找两个正序数组的中位数 | 困难 | 二分 | □ | | 29 | 两数相除 | 中等 | 二分 | □ | | 33 | 搜索旋转排序数组 | 中等 | 旋转数组二分 | □ | | 34 | 在排序数组中查找元素的第一个和最后一个位置 | 中等 | 二分边界 | □ | | 50 | Pow(x, n) | 中等 | 快速幂 | □ | | 74 | 搜索二维矩阵 | 中等 | 二维二分 | □ | | 122 | 买卖股票的最佳时机 II | 中等 | 贪心 | □ | | 134 | 加油站 | 中等 | 贪心 | □ | | 135 | 分发糖果 | 困难 | 贪心 | □ | | 153 | 寻找旋转排序数组中的最小值 | 中等 | 旋转数组 | □ | | 209 | 长度最小的子数组 | 中等 | 滑动窗口 | □ | | 239 | 滑动窗口最大值 | 困难 | 单调队列 | □ | | 240 | 搜索二维矩阵 II | 中等 | 二维搜索 | □ | | 406 | 根据身高重建队列 | 中等 | 贪心 + 排序 | □ | | 435 | 无重叠区间 | 中等 | 区间贪心 | □ | ### 💻 必背模板 ```python # 1. 链表反转模板 def reverse_list(head): prev, curr = None, head while curr: next_temp = curr.next curr.next = prev prev = curr curr = next_temp return prev # 2. 快慢指针模板 def fast_slow_pointer(head): fast = slow = head while fast and fast.next: fast = fast.next.next slow = slow.next return slow # 中点 # 3. 二分查找模板 def binary_search(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # 4. 快速排序模板 def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right) # 5. 归并排序模板 def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left, right) def merge(left, right): result = [] i = j = 0 while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result.extend(left[i:]) result.extend(right[j:]) return result ``` ### 📅 每日安排 | 日期 | 题目 | 数量 | 笔记 | |------|------|------|------| | 4.7 | 链表 | 5 题 | □ | | 4.8 | 贪心算法 | 5 题 | □ | | 4.9 | 二分查找 | 5 题 | □ | | 4.10 | 栈/队列/滑动窗口 | 5 题 | □ | | 4.11 | 蓝桥杯真题(一) | 1 套 | □ | | 4.12 | 蓝桥杯真题(二) | 1 套 | □ | | 4.13 | 总复习 | 错题 | □ | --- ## 📊 进度追踪 ### 总体进度 | 周次 | 计划题目 | 完成 | 完成率 | |------|----------|------|--------| | 第 1 周 | 35 题 | 0/35 | 0% | | 第 2 周 | 15 题 | 0/15 | 0% | | 第 3 周 | 35 题 | 0/35 | 0% | | 第 4 周 | 15 题 + 真题 | 0/15 | 0% | | **总计** | **100 题** | **0/100** | **0%** | ### 每日打卡 | 日期 | 完成题目 | 用时 | 正确率 | 笔记 | |------|----------|------|--------|------| | 3.17 | | | | | | 3.18 | | | | | | 3.19 | | | | | | 3.20 | | | | | | 3.21 | | | | | | 3.22 | | | | | | 3.23 | | | | | --- ## 📝 错题本模板 | 题号 | 题目 | 错误原因 | 知识点 | 复习日期 | 状态 | |------|------|----------|--------|----------|------| | | | | | | □ | ### 错误原因分类 - □ 思路错误 - □ 边界条件 - □ 语法错误 - □ 时间复杂度 - □ 空间复杂度 - □ 粗心大意 --- ## 💡 蓝桥杯特别提醒 ### 必背算法(蓝桥杯专属) 1. **快速排序** — 必须手写 2. **归并排序** — 逆序对问题 3. **二分查找** — 边界处理 4. **DFS/BFS** — 图遍历 5. **并查集** — 连通性问题 6. **动态规划** — 背包、LIS 7. **回溯** — 排列组合 8. **数论基础** — GCD、LCM、素数筛 9. **前缀和与差分** — 区间查询 10. **贪心算法** — 区间问题 ### 注意事项 - ⚠️ 蓝桥杯是**OI 赛制**(提交后不立即反馈) - ⚠️ **时间限制较严**,注意算法复杂度 - ⚠️ 有**填空题**,需要手算或写小程序验证 - ⚠️ **数据范围大**,注意 long long 和取模 --- ## 🎯 每日刷题流程 ``` 1. 选题(5 分钟) → 按今日计划选题 2. 做题(30-45 分钟/题) → 独立思考,不翻答案 → 45 分钟没思路再看题解 3. 写笔记(15-20 分钟/题) → 用自己的话总结思路 → 记录关键技巧和易错点 → 标注相似题目 4. 复习(隔天 10 分钟) → 看前一天的笔记 → 尝试默写代码模板 ``` --- ## 📚 学习资源 ### 官方资源 - LeetCode 中国:https://leetcode.cn/ - Hot 100 学习计划:https://leetcode.cn/studyplan/top-100-liked/ ### 题解资源 - LeetCode 官方题解 - 力扣讨论区 - GitHub:https://github.com/youngyangyang04/leetcode-master ### 蓝桥杯资源 - 蓝桥杯官网:https://www.lanqiao.cn/ - 历年真题:官网下载 - AcWing:https://www.acwing.com/ --- _最后更新:2026-03-17_ _祝蓝桥杯取得好成绩!加油!💪_