# 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_  
_祝蓝桥杯取得好成绩！加油！💪_
