- 乱七八糟的问题
- 算法时间复杂度与空间复杂度
- 刷算法题的平台
- 输入输出格式化
- 算法时间复杂度爆栈
- 常见C++语言的语法(stl、memset、sort与运算符重载)
- 代码编辑器的使用:Dev-C++使用
结构体表示法
- 算法分析
- 做算法题的顺序
- 算法题技巧
- 大专题都给一个系统性的知识点讲解
- 排序
- 常见数据结构
- 树、回溯、图论
- 数学知识
- 动态规划
- 其余小专题直接都按小专题目录上题,写题解即可
我们编写程序(做leetcode题),其实最终还是让计算机去“运算”的,而为了减小时间复杂度和空间复杂度,“算法”仍然是核心,“数据结构”只是为了实现算法的一个方便描述的工具、一个将问题抽象出来的存在;而结果的得出的过程则一种对问题的“模拟”。
- 通过对“语言基础”的学习,我们知道了:
- 程序运行的基础:顺序结构、分支结构、循环结构、函数/方法/类封装等
- 算法:各种运算符、比较、排序、交换、查找、最大最小值、复制算法的使用
- 数据结构:数组、字符串、结构体、STL
以及,最重要的:如何去构造数据结构?
我们之前在 C++ 里学过结构体struct + 指针 + 动态创造内存(malloc函数),用它来定义一个数据结构,这种虽然严谨美观,但是有三大缺点:
- 每个变量名又臭又长,如果没有代码提示很容易打错(Compile Error)
- 指针充满了危险性,一不留神就容易出现内存泄漏/段错误(RE)
- 开空间的过程会导致程序运行的速度下降,可能会加大超时错误(TLE)的概率。
为了解决这几个问题,我们引入了一种船新的构造数据结构的方法:
- 简化变量名,在每道题里记住他们的含义,在开头打上注释;
- 使用静态数组方式模拟
基本算法:使用单一数组数据结构来解决的问题:
排序、查找、高精度、前缀和与差分、双指针、位运算、离散化、区间合并。
基本数据结构:链表、栈、队列、字符串匹配、字典树、并查集、堆、哈希表。
对于特殊的数据结构,我们也提供了一些特殊的算法:图论:dfs、bfs、拓扑排序、关键路径、最短路(dij等)、最小生成树(prim、Kruskal)
对于一些更特殊的问题,我们也有更高效的算法:dp、贪心等