# 卡哥 Hot100 题解写作风格指南

基于对 0001.两数之和、0015.三数之和、0027.移除元素、0039.组合总和、0046.全排列、0077.组合、0053.最大子序和、0070.爬楼梯、0042.接雨水、0084.柱状图中最大的矩形、0101.对称二叉树、0102.二叉树的层序遍历、0020.有效的括号、0121.买卖股票的最佳时机、0072.编辑距离、0037.解数独、0051.N皇后、0131.分割回文串、0045.跳跃游戏II、0106.构造二叉树、0115.不同的子序列 等 20+ 篇题解的风格提炼。


# 一、Frontmatter 规范

---
description: 一句话概括题目+解法核心(不用太长,30-50字即可)
keywords:
  - 题目关键词1
  - 题目关键词2
  - 算法名称
  - 数据结构
tags:
  - 算法分类
  - 数据结构
title: "题号. 题目名称 | 算法1 | 算法2 | Hot100"
---
1
2
3
4
5
6
7
8
9
10
11
12

# 要点

  • title 格式题号. 题目名 | 核心算法1 | 核心算法2 | Hot100,竖线分隔,Hot100 放最后
  • description:简洁说明题目和核心解法,30-50字
  • keywords:3-6个,覆盖题目名、算法名、数据结构名
  • tags:2-4个,比 keywords 更宏观(如"哈希表""动态规划")

# 示例

title: "49. 字母异位词分组 | 哈希表 | Hot100"
title: "53. 最大子数组和 | 贪心 & 动态规划 | Hot100"
title: "128. 最长连续序列 | 哈希表 | Hot100"
1
2
3

# 二、文章结构(Hot100 版本)

Hot100 题解比主目录更精炼、更结构化,不需要广告 banner 和"算法公开课"板块。

# 标准结构

# 题号. 题目名称

[力扣题目链接](https://leetcode.cn/problems/xxx/)

## 题目描述

(题目文字、示例、提示)

## 思路

(核心解法讲解,循序渐进)

## 模拟过程

(用具体示例逐步演示算法流程,配图)

## 解题代码

(C++ 为主语言,带中文注释)

## 复杂度分析

## 其他语言

### Python3
### Java
### Go
### JS

## 与代码随想录联系

(关联主站相关题目和学习路径)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 结构说明

  1. 题目描述:直接从力扣原文摘录,包括题目、示例、提示,格式整洁
  2. 思路:核心讲解区,先抛问题再逐步分析(详见"思路写法"章节)
  3. 模拟过程:Hot100 特色板块,用具体数据一步步走算法,配图说明
  4. 解题代码:C++ 为主,注释精炼,用中文
  5. 复杂度分析:时间+空间,简洁一行
  6. 其他语言:Python3、Java、Go、JS,按此顺序
  7. 与代码随想录联系:Hot100 特色板块,引导回主站体系学习

# 三、思路写法

# 核心原则:先抛问题,逐步引导

不要上来就给答案,而是先让读者思考,再一步步分析。

# 推荐模式

模式A:暴力→优化(适合有暴力解的题目)

暴力解法是两层for循环,时间复杂度O(n²)。

但我们可以用xxx方法优化:
[分析为什么可以优化]
[引出最优解法]
1
2
3
4
5

模式B:特征→映射→数据结构(适合哈希/映射类题目)

本题本质是要[做什么]。

这就需要[某种映射/操作]。

想到映射,就应该想到[哈希表/某种数据结构]。

那么用什么样的[哈希表]呢?
[分析不同选择的优劣]
1
2
3
4
5
6
7
8

模式C:模板套用(适合回溯/DP类题目)

回溯三部曲:
1. 递归函数参数
2. 递归终止条件
3. 单层搜索逻辑

动规五部曲:
1. 确定dp数组及下标含义
2. 确定递推公式
3. dp数组初始化
4. 确定遍历顺序
5. 举例推导dp数组
1
2
3
4
5
6
7
8
9
10
11

# 思路中的关键手法

  1. 设问引导:先问"为什么""什么时候",再回答

    • "什么时候需要startIndex呢?"
    • "为什么会想到用哈希表?"
    • "map中key和value分别表示什么?"
  2. 加粗关键结论:让读者一眼看到核心要点

    • 本题还需要startIndex来控制for循环的起始位置
    • 对总集合排序之后,如果下一层的sum已经大于target,就可以结束遍历
    • 这道题目中并不需要key有序,选择std::unordered_map效率更高
  3. 关联前题:自然带出之前做过的相关题目,帮助建立体系

  4. 对比分析:不同方法/数据结构的对比

    • "数组 vs set vs map"三种哈希法的适用场景
    • "回溯法 vs 贪心法"的思路差异

# 四、模拟过程写法

这是 Hot100 题解的特色板块,用具体数据一步步走算法流程。

# 要点

  • 选一个具体示例(优先用力扣给的示例1)
  • 每一步写清楚当前状态
  • 配图可以多张,不需要一张图讲完整个流程——把过程拆成多个阶段,每个阶段配一张图,逐步推进
  • 文字描述和图片交替出现,图紧跟对应的文字说明

# 示例(49.字母异位词分组)

## 模拟过程如下:

eat 排序后为 aet,将 eat 放在 key 为 aet 的 map 中:

<img src='xxx.png' width=800>

tea 排序后为 aet,将 tea 放在 key 为 aet 的 map 中:

<img src='xxx.png' width=800>

……

最后,map 就根据 key,帮我们分门别类,将所有字符串按照字母异位词分组。
1
2
3
4
5
6
7
8
9
10
11
12
13

# 五、代码写法

# C++ 代码规范

  • class Solution 包裹(力扣格式)
  • 注释用中文
  • 注释精炼,只写"为什么"和"关键点",不写显而易见的"是什么"
  • 关键行用行内注释 // 关键点:xxx

# 代码中的注释风格

// 好的注释(写为什么/关键点)
backtracking(candidates, target, sum, i); // 不用i+1了,表示可以重复读取当前的数

// 坏的注释(写显而易见的事)
backtracking(candidates, target, sum, i); // 调用回溯函数
1
2
3
4
5
// 好的注释(解释策略选择)
auto iter = map.find(target - nums[i]); // 遍历当前元素,在map中寻找是否有匹配的key

// 坏的注释(重复代码含义)
auto iter = map.find(target - nums[i]); // find target - nums[i]
1
2
3
4
5

# 其他语言

按 Python3 → Java → Go → JS 顺序排列,每个语言用 ### 三级标题。

代码块语言标记小写:```python```java```go```javascript


# 六、语气与用词

# 称呼读者

  • 用"录友"或"录友们",不用"同学们""大家""读者"
  • 例:"很多录友把这道题目通过了,但都没想清楚map是用来做什么的"

# 口语化但不随意

  • 允许口语化表达,但保持专业
  • 好的:"吓得我赶紧想想出现0可咋办"
  • 好的:"很明显暴力的解法是两层for循环"
  • 避免过于正式:"综上所述""由此可见""不难发现"

# 语气特点

  • 直接干练:不绕弯子,直接说重点
  • 设问引导:用问题引发思考,而非直接灌输
  • 自嘲幽默:偶尔有轻松的表达调节节奏
  • 鼓励感:让读者觉得"我能理解"

# 典型句式

场景 句式
引出方法 "那么就应该想到xxx了"
强调关键 "这一点很重要" / "注意xxx"
设问引导 "为什么会想到用xxx?" / "什么时候需要xxx呢?"
对比前题 "本题和xx.题名的区别是……"
总结要点 "想清楚以下几点,本题才算理解透彻"
提醒易错 "很多录友xxx,但其实xxx"
鼓励读者 "相信结合视频再看本篇题解,更有助于大家对本题的理解"

# 七、图片规范

# 格式

使用 <img> 标签,不用 markdown 的 ![]() 语法:

<img src='https://file1.kamacoder.com/i/web/xxx.png' width=800>
1

# 配图原则

  • 模拟过程可以多张图,不需要一张图讲完整个流程,把过程拆成多个阶段逐步推进
  • 宽度统一 width=800
  • 思路中的图,用于说明树形结构、流程、状态变化
  • 每张图紧跟对应的文字说明

# 图片工作流

  1. 先画 drawio:在 docs/pics/algo/ 下创建 .drawio 文件,命名格式 NNNN.题目关键词-说明.drawio
  2. markdown 中先放 drawio 文件名占位,放在文章对应位置,等卡哥确认 drawio 内容
  3. 卡哥确认后:导出为 JPG → 上传卡码图床 → 用图床 URL 替换占位
  4. 最终格式:<img src='https://file1.kamacoder.com/i/web/xxx.jpg' width=800>

# 八、"与代码随想录联系"写法

这是 Hot100 特色板块,目的是把 Hot100 题目和主站体系关联起来。

# 内容要点

  1. 说明本题对应主站哪个章节/哪道题
  2. 提供主站链接(用 .html 格式)
  3. 简要说明主站相关章节能学到什么
  4. 如果有相似思路的前题,列出关联

# 示例

## 与代码随想录联系

我在代码随想录哈希表章节里,详细讲解过,什么时候用数组,什么时候用set,什么时候用map。

如果想进一步学习,可以看一下[代码随想录哈希表章节](链接),刷前四节,就可以理解了。

同时大家在做这道题目的时候,一定会想到,代码随想录哈希表章节:[242.有效的字母异位词](链接)。
1
2
3
4
5
6
7

# 九、不同题型写作要点

# 哈希表题

  • 先讲"为什么会想到哈希"(查询元素是否出现过)
  • 再分析用什么哈希结构(数组 vs set vs map)
  • 最后讲 key/value 怎么设计

# 双指针题

  • 先讲暴力解法
  • 分析为什么可以优化(单调性/有序性/对撞性质)
  • 给出双指针的移动逻辑

# 回溯题

  • 用"回溯三部曲"框架
  • 画树形结构图
  • 重点讲剪枝优化
  • 对比和前题的差异(startIndex?used数组?)

# 动态规划题

  • 用"动规五部曲"框架
  • 重点讲dp数组含义和递推公式
  • 用矩阵/表格图推导过程
  • 分析初始化的合理性

# 贪心题

  • 先讲"局部最优→全局最优"的思路
  • 用反例说明为什么贪心有效
  • 配图说明覆盖范围/跳跃过程

# 二叉树题

  • 明确遍历方式(前中后序/层序)
  • 画图说明递归过程
  • 讲清楚递归函数的参数和返回值

# 单调栈题

  • 先讲暴力解法
  • 分析"单调性"是如何产生的
  • 用柱状图/温度图模拟入栈出栈过程

# 十、写作检查清单

写完题解后,对照以下清单检查:

  • [ ] Frontmatter 的 title 包含题号、题目名、核心算法、Hot100
  • [ ] 有力扣题目链接
  • [ ] 题目描述从力扣原文摘录,含示例和提示
  • [ ] 思路部分有设问引导,不只给答案
  • [ ] 关键结论用加粗
  • [ ] 有模拟过程板块,配图逐步演示(可多张图,不必一张讲完)
  • [ ] C++ 代码注释用中文,注释写"为什么"而非"是什么"
  • [ ] 有复杂度分析
  • [ ] 有其他语言版本(Python3/Java/Go/JS)
  • [ ] 有"与代码随想录联系"板块
  • [ ] 称呼读者用"录友"
  • [ ] 图片用 <img> 标签,width=800
  • [ ] 先画 drawio 放 docs/pics/algo/,确认后再导出上传卡码图床

评论

验证登录状态...