算法学习导航

说明

本目录用于存放各类算法学习资料、笔记和题解,是系统化学习算法和数据结构的完整知识库。

笔记要求

算法类笔记优先按 算法笔记写作规范 补齐:浅显原理、实现方式、为什么这样实现、图解或状态变化示例。代码模板要说明变量含义和边界原因,避免只保存代码。

完整性记录

目录覆盖情况、已补缺口和后续高级扩展统一记录在 算法知识体系审计。

flowchart LR
    A[算法基础] --> B[数据结构]
    A --> C[排序与搜索]
    B --> D[树与图]
    C --> E["分治 / 贪心 / 回溯"]
    D --> F["动态规划 / 高级图论"]
    E --> F
    F --> G[题解与模板]

📚 目录结构

🧭 算法基础

🎯 实战练习

LeetCode题解

🏗️ 基础数据结构

  • 数据结构 - 数组、链表、栈、队列、哈希表、堆等基础数据结构
    • 数组 - 随机访问、双指针、前缀和的载体
    • 链表 - 指针操作、反转、快慢指针
    • 栈 - 单调栈、表达式与括号问题
    • 队列 - BFS、层序遍历、单调队列
    • 哈希表 - 计数、去重、映射
    • 堆 - Top K、优先队列、中位数
    • 并查集 - 连通性、Kruskal、集合合并
    • Trie树 - 前缀匹配与字典树
    • 线段树 - 区间查询与区间更新
    • 树状数组 - 动态前缀和、逆序对
    • 跳表 - 多层索引有序结构
    • 布隆过滤器 - 概率型存在性判断
    • 稀疏表 - 静态区间最值 O(1) 查询

🔍 排序与搜索

排序算法

搜索算法

💡 高级算法技巧

动态规划

贪心算法

回溯算法

分治算法

🌲 专题算法

图算法

树算法

字符串算法

数学算法

位运算

🛠️ 算法模板

📖 学习路线

🌱 入门阶段(1-2个月)

Week 1-2: 基础数据结构

学习目标:掌握基本数据结构的操作

  • 数组与链表

    • 数组的基本操作(插入、删除、查找)
    • 链表的基本操作(反转、合并、删除节点)
    • LeetCode: 1, 21, 26, 27, 88, 206
  • 栈与队列

    • 栈的应用(括号匹配、单调栈)
    • 队列的应用(BFS、滑动窗口)
    • LeetCode: 20, 155, 232, 739
  • 哈希表

    • 哈希表的查找、插入、删除
    • 两数之和、字母异位词分组
    • LeetCode: 1, 49, 242, 349, 350

Week 3-4: 基础算法

学习目标:掌握基础算法思想

  • 排序算法

    • 冒泡排序、选择排序、插入排序(O(n²))
    • 快速排序、归并排序、堆排序(O(nlogn))
    • LeetCode: 912(排序数组)
  • 二分查找

    • 标准二分查找
    • 左右边界查找
    • LeetCode: 35, 69, 704, 34
  • 双指针技巧

    • 快慢指针、对撞指针
    • 三数之和、盛最多水的容器
    • LeetCode: 11, 15, 283, 344

里程碑检查:

  • ✅ 完成50道简单题
  • ✅ 通过率 > 80%
  • ✅ 理解基本数据结构和算法

🌿 进阶阶段(2-4个月)

Week 5-8: 树相关算法

学习目标:掌握树的各种操作

  • 二叉树遍历

    • 前序、中序、后序遍历(递归+迭代)
    • 层序遍历(BFS)
    • LeetCode: 94, 102, 144, 145
  • 二叉搜索树(BST)

    • BST的性质和操作
    • 验证BST、第K小元素
    • LeetCode: 98, 230, 235, 450
  • 树的递归

    • 树的深度、直径
    • 翻转二叉树、对称二叉树
    • LeetCode: 101, 104, 110, 226, 543

Week 9-12: 图相关算法

学习目标:掌握图的基本算法

  • 图的表示

    • 邻接矩阵、邻接表
    • 边集数组
  • DFS与BFS

    • 图的深度优先搜索
    • 图的广度优先搜索
    • LeetCode: 200, 133, 207, 797
  • 最短路径

    • Dijkstra算法(非负权)
    • Bellman-Ford算法(含负权)
    • Floyd-Warshall算法(所有点对)
    • LeetCode: 743, 787, 1334

Week 13-16: 动态规划入门

学习目标:理解DP的基本思想

  • 一维DP

    • 爬楼梯、打家劫舍
    • 最大子数组和、最长递增子序列
    • LeetCode: 70, 198, 53, 300
  • 二维DP

    • 不同路径、最小路径和
    • 编辑距离、最长公共子序列
    • LeetCode: 62, 64, 72, 1143
  • 背包问题

    • 0-1背包、完全背包
    • 分割等和子集、零钱兑换
    • LeetCode: 322, 416, 494, 518

里程碑检查:

  • ✅ 完成150道中等题
  • ✅ 掌握树和图的基本算法
  • ✅ 理解动态规划思想

🌳 高级阶段(3-6个月)

Week 17-20: 高级数据结构

学习目标:掌握高级数据结构

  • 堆与优先队列

    • 最大堆、最小堆
    • 第K大元素、中位数
    • LeetCode: 215, 295, 347, 703
  • 并查集

    • 路径压缩、按秩合并
    • 连通性问题
    • LeetCode: 547, 684, 990, 1319
  • Trie树

    • 前缀树的构建和应用
    • 单词搜索、前缀匹配
    • LeetCode: 208, 211, 648
  • 线段树与树状数组

    • 区间查询和修改
    • 应用场景

Week 21-24: 高级算法

学习目标:掌握高级算法技巧

  • 高级动态规划

    • 状态压缩DP
    • 区间DP(戳气球)
    • 树形DP
    • LeetCode: 312, 1000, 337
  • 贪心算法

    • 贪心策略的证明
    • 区间调度、跳跃游戏
    • LeetCode: 45, 55, 122, 135, 452
  • 回溯与剪枝

    • 子集、组合、排列
    • N皇后、解数独
    • LeetCode: 37, 39, 40, 46, 47, 51, 78
  • 分治算法

    • 归并排序的应用
    • 快速选择
    • LeetCode: 215, 493

Week 25-28: 专题深化

学习目标:深入掌握专题算法

  • 图的高级算法

    • 拓扑排序(Kahn、DFS)
    • 强连通分量(Tarjan)
    • 最小生成树(Kruskal、Prim)
    • LeetCode: 207, 210, 1192, 1584
  • 字符串匹配

    • KMP算法
    • Rabin-Karp算法
    • 最长回文子串(Manacher)
    • LeetCode: 28, 5, 647
  • 位运算技巧

    • 基本位运算
    • 位运算应用
    • LeetCode: 136, 191, 231, 338, 461

里程碑检查:

  • ✅ 完成50道困难题
  • ✅ 掌握所有核心算法
  • ✅ 总题量 300+

📝 学习资源

📚 在线平台

📖 推荐书籍

入门级

  • 《剑指Offer》 - 国内面试必备,66道经典题
  • 《程序员代码面试指南》 - IT名企算法与数据结构题目最优解
  • 《算法图解》 - 图文并茂,适合入门

进阶级

  • 《算法》第四版(Algorithms 4th Edition) - Sedgewick经典教材
  • 《算法竞赛进阶指南》 - 竞赛必备
  • 《挑战程序设计竞赛》 - 日本经典竞赛书籍

理论级

  • 《算法导论》(Introduction to Algorithms) - CLRS圣经
  • 《算法设计手册》(The Algorithm Design Manual) - Skiena
  • 《算法心得》 - 高级算法技巧

🎬 视频课程

中文课程

英文课程

🌐 在线资源

🎯 刷题计划

📅 每日目标

  • 工作日

    • 早上:1道简单/中等题(30-45分钟)
    • 晚上:复习1道已做题目(15-20分钟)
  • 周末

    • 上午:2-3道中等题(2-3小时)
    • 下午:1道困难题/专题复习(1-2小时)

📊 周目标

  • 新题:10-15题
  • 复习:5-8题
  • 总结:整理1个算法专题
  • 模板:完善1-2个算法模板

🗓️ 月目标

  • 新题:40-60题
  • 复习:20-30题
  • 掌握:2-3个算法专题
  • 参加:1-2次周赛(检验水平)

📊 进度追踪

LeetCode进度

难度已完成目标进度
🟢 简单02000%
🟠 中等03000%
🔴 困难01000%
总计06000%

专题维护状态

专题当前状态下一步
数据结构主干笔记已整理沉淀真实题解
排序搜索主干笔记已整理,已有动画补边界题和综合题
动态规划主干笔记已整理补状态压缩与区间题解
图算法主干笔记已整理,已有动画补高级专题题解
贪心算法主干笔记已整理补策略证明
回溯算法主干笔记已整理补剪枝对比动画
树算法主干笔记已整理,已有动画沉淀 BST 与 LCA 题解
字符串主干笔记已整理补匹配算法对比

题单进度

题单已完成总题数进度
LeetCode Hot 10001000%
剑指Offer0750%
简单题清单0500%
中等题清单0800%
困难题清单0500%

🏆 阶段里程碑

入门阶段(1-2个月)

  • 完成50道简单题
  • 掌握基本数据结构(数组、链表、栈、队列、哈希表)
  • 理解基础算法(排序、二分、双指针)
  • 通过率 > 80%

进阶阶段(3-5个月)

  • 完成150道中等题
  • 掌握核心算法(DP、回溯、贪心、图论)
  • 刷完LeetCode Hot 100
  • 理解算法时间复杂度分析

冲刺阶段(6个月+)

  • 完成50道困难题
  • 刷完剑指Offer
  • 总题量 300+
  • 参加周赛,rating > 1800

专家阶段(1年+)

  • 总题量 500+
  • 所有专题深入掌握
  • 能独立分析和优化算法
  • 竞赛 rating > 2000

💡 学习建议

核心原则

  1. 循序渐进:从简单到困难,打好基础
  2. 理解优先:理解思路比记忆代码更重要
  3. 一题多解:尝试不同解法,培养优化思维
  4. 定期复习:使用遗忘曲线,巩固已学内容
  5. 总结模板:整理常用模板,形成代码库

常见误区

  • ❌ 只做题不总结
  • ❌ 死记硬背代码
  • ❌ 追求题量忽视质量
  • ❌ 不复习已做题目
  • ❌ 遇到困难就看答案

高效方法

  • ✅ 做题前先思考5-10分钟
  • ✅ 一题至少做2遍(间隔1-3天)
  • ✅ 总结题型和解题模板
  • ✅ 参加周赛检验水平
  • ✅ 定期回顾错题

🛠️ 工具推荐

刷题平台

  • LeetCode CN - 主要平台,中文界面
  • 力扣竞赛 - 周赛、双周赛,检验水平
  • 牛客网 - 模拟面试,公司真题

学习工具

  • Obsidian - 记录题解(当前知识库)
  • Anki - 间隔复习,防止遗忘
  • GitHub - 代码管理,建立个人题库
  • Notion - 进度追踪,学习计划

开发工具

  • VS Code - 轻量级编辑器
  • GoLand - Go 专用 IDE
  • Go Playground - 在线运行 Go 示例
  • Vim/Emacs - 竞赛环境

最后更新:2026-08-09 文档版本:v2.0 维护者:个人学习笔记

名言

“算法是计算机科学的核心,掌握算法就是掌握了解决问题的钥匙。” - Donald Knuth