Skip to content

Latest commit

 

History

History
217 lines (141 loc) · 5.77 KB

File metadata and controls

217 lines (141 loc) · 5.77 KB

EasyCode 题库写作规范

本文档定义 EasyCode 题库的 markdown 格式、目录结构与写作约定。仓库 Code/ 目录下附带若干示例题供参考,你可以照着样例把自己想学习的题目装填进来。

make ingest 时,后端会扫描 Code/ 下所有符合约定的 markdown,解析为 backend/data/problems.json,再灌入数据库。


一、目录结构

题库按章节分子目录,每个子目录代表一个算法主题。目录前缀 NN_ 决定排序:

Code/
├── PROJECT_GUIDE.md              ← 本文件
├── 00_学习方法指南.md             ← 可选:学习方法说明
├── 01_数组/
│   ├── 00_数组理论基础.md         ← 可选:章节理论引言
│   ├── 01_704_二分查找.md         ★ 核心题
│   ├── 02_027_移除元素.md         ★
│   └── 08_数组总结.md             ← 可选:章节总结
├── 02_链表/
│   └── ...
└── ...

文件命名约定

部分 说明
章节目录:NN_<主题>/ NN 是两位数字章节序号,<主题> 是中文名
题目文件:NN_<题号>_<标题>.md NN 章节内序号,<题号> 来源平台编号,<标题> 中文
标题后缀 (可选) 标记核心 / 高频 / 必练题,前端列表会高亮
00_xxx 理论基础.md 章节首篇的引言性文档(可选)

二、内容分级

题库分两档,各自有不同的写作深度:

核心题(★)— 深度讲解

每个章节里最经典、最值得反复练的题。建议提供完整讲解,包含:

  1. 题目描述 — 题面、示例、约束
  2. 解题思路 — 暴力 → 优化的推导过程
  3. 代码实现(LeetCode 版) — 类方法签名,带注释
  4. 代码实现(ACM 版) — 含 input() / print() 的可独立运行版
  5. 执行过程演示 — 用具体例子手动走一遍
  6. 易错点 — 边界条件、常见 bug
  7. 复杂度分析 — Big-O 时空 + 一句话推导

普通题 — 精简版

提供基本要素即可:

  1. 题目描述
  2. 核心思路(1–3 句话点明方向)
  3. 代码实现
  4. 一句话总结

三、单题文档模板

核心题模板

# [题号]. 标题 ★

## 题目描述

题面、示例、约束。可在原文后附一句通俗"翻译"。

## 前置知识

阅读本题前你需要了解的概念(如适用)。

## 解题思路

### 暴力思路(为什么需要优化?)

先给出最直觉的暴力做法,分析复杂度问题,引出"为什么需要更好的方法"。

### 核心概念

提炼本题的核心思想(如二分查找的「循环不变量」、双指针的「快慢分工」),
围绕这个概念展开推理,让读者理解模板是怎么来的,而不是死记。

### 分步思路

第一步:...
第二步:...
第三步:...

## Python 代码(LeetCode 版)

```python
class Solution:
    def method_name(self, ...) -> ...:
        # 关键操作附中文注释
        ...
```

## Python 代码(ACM 版)

```python
import sys

def solve():
    # 完整可运行,含输入读取与输出打印
    ...

if __name__ == "__main__":
    solve()
```

## 执行过程演示

用题目中的例子,手动走一遍代码每一步。

## 易错点

- 边界条件:...
- 常见 bug:...

## 复杂度分析

- 时间:O(?) — 一句话解释
- 空间:O(?) — 一句话解释

## 举一反三

核心概念可以用在哪些场景。模板放这里作为"理解后的速查"。

普通题模板

# [题号]. 标题

## 题目描述

简要描述。

## 核心思路

1–3 句话点明解法方向。

## Python 代码

```python
# 附关键注释
```

## 一句话总结

这道题的核心收获是什么。

四、写作规范

讲解四原则(核心题建议遵守)

  1. 先暴力再优化 — 先展示暴力解,分析复杂度缺陷,再引出优化解,让读者理解"为什么需要更好的方法"
  2. 围绕核心概念,而非直接给模板 — 抓住一个核心概念讲透,模板放文末"举一反三"作为速查
  3. 多种写法对比 — 同题多解或同解多写法,通过对比加深理解
  4. 题目描述保留原文 — 直接使用原平台题面,保留示例和约束,可在原文后加通俗"翻译"

语言风格

  • 用"你"称呼读者,保持亲切
  • 避免学术化表述,用类比和日常语言解释抽象概念
  • 每个新概念第一次出现给出解释
  • 不假设读者有任何前置算法知识(但假设会基本 Python)

代码规范

  • Python 3
  • 变量名有意义(避免单字母 a, b, c,惯用 i, j, n 例外)
  • 关键操作附中文注释
  • 优先使用 Python 内置数据结构(list / dict / set / collections.deque)
  • 若题目用到 LeetCode 自定义类(TreeNode / ListNode),在章节理论基础中先定义

理论基础篇(可选)

每章首篇 00_xxx理论基础.md 建议覆盖:

  • 这个数据结构 / 算法是什么(通俗解释)
  • 在 Python 中如何表示和操作
  • 面试常考的核心套路
  • 该章节的学习路线图

总结篇(可选)

每章末篇 xx_总结.md 建议覆盖:

  • 本章所有题目速查表(题号 / 题名 / 核心方法 / 难度)
  • 本章核心解题模式 / 模板回顾
  • 常见变体和面试可能的追问

五、来源与版权

EasyCode 不分发任何题库内容。你装填的题目、题面、参考解的版权归原作者所有。

整理题库时建议:

  • 题面:使用原平台(如 LeetCode 中文版)的官方描述,并在文末附上来源链接
  • 参考解:可以参考公开题解整理,但建议用自己的话重写,避免直接复制他人代码
  • 理论与总结:推荐根据多方资料综合后用自己的表达写,既加深理解又规避版权风险

你的题库 markdown 只存在本地 Code/ 目录,不会被上传也不会与他人共享。