1. 乱七八糟的问题
    1. 算法时间复杂度与空间复杂度
    2. 刷算法题的平台
    3. 输入输出格式化
    4. 算法时间复杂度爆栈
    5. 常见C++语言的语法(stl、memset、sort与运算符重载)
    6. 代码编辑器的使用:Dev-C++使用
    7. 结构体表示法
    8. 算法分析
    9. 做算法题的顺序
    10. 算法题技巧
  2. 大专题都给一个系统性的知识点讲解
    1. 排序
    2. 常见数据结构
    3. 树、回溯、图论
    4. 数学知识
    5. 动态规划
  3. 其余小专题直接都按小专题目录上题,写题解即可

我们编写程序(做leetcode题),其实最终还是让计算机去“运算”的,而为了减小时间复杂度和空间复杂度,“算法”仍然是核心,“数据结构”只是为了实现算法的一个方便描述的工具、一个将问题抽象出来的存在;而结果的得出的过程则一种对问题的“模拟”。

  1. 通过对“语言基础”的学习,我们知道了:

以及,最重要的:如何去构造数据结构? 我们之前在 C++ 里学过结构体struct + 指针 + 动态创造内存(malloc函数),用它来定义一个数据结构,这种虽然严谨美观,但是有三大缺点:

  1. 每个变量名又臭又长,如果没有代码提示很容易打错(Compile Error)
  2. 指针充满了危险性,一不留神就容易出现内存泄漏/段错误(RE)
  3. 开空间的过程会导致程序运行的速度下降,可能会加大超时错误(TLE)的概率。

为了解决这几个问题,我们引入了一种船新的构造数据结构的方法:

  1. 简化变量名,在每道题里记住他们的含义,在开头打上注释;
  2. 使用静态数组方式模拟

基本算法:使用单一数组数据结构来解决的问题: 排序、查找、高精度、前缀和与差分、双指针、位运算、离散化、区间合并。 基本数据结构:链表、栈、队列、字符串匹配、字典树、并查集、堆、哈希表。

对于特殊的数据结构,我们也提供了一些特殊的算法:图论:dfs、bfs、拓扑排序、关键路径、最短路(dij等)、最小生成树(prim、Kruskal)

对于一些更特殊的问题,我们也有更高效的算法:dp、贪心等