我们编写程序(做leetcode题),其实最终还是让计算机去“运算”的,而为了减小时间复杂度和空间复杂度,“算法”仍然是核心,“数据结构”只是为了实现算法的一个方便描述的工具、一个将问题抽象出来的存在;而结果的得出的过程则一种对问题的“模拟”。
以及,最重要的:如何去构造数据结构? 我们之前在 C++ 里学过结构体struct + 指针 + 动态创造内存(malloc函数),用它来定义一个数据结构,这种虽然严谨美观,但是有三大缺点:
为了解决这几个问题,我们引入了一种船新的构造数据结构的方法:
基本算法:使用单一数组数据结构来解决的问题: 排序、查找、高精度、前缀和与差分、双指针、位运算、离散化、区间合并。 基本数据结构:链表、栈、队列、字符串匹配、字典树、并查集、堆、哈希表。
对于特殊的数据结构,我们也提供了一些特殊的算法:图论:dfs、bfs、拓扑排序、关键路径、最短路(dij等)、最小生成树(prim、Kruskal)
对于一些更特殊的问题,我们也有更高效的算法:dp、贪心等