数据结构+算法
一般而言,二者是相辅相成的。
所以需要结合起来学习。
创作目的
知行合一。
系统的学习+练习一下数据结构+算法。
修炼一下内力。
数据结构专题
大概分为几个类别:
-
理论知识
-
源码学习
-
数据结构实现
-
题目练习
-
项目应用
理论
其中 1/2 非常偏理论,会导致很枯燥。
理论+编码
2+3 构成了源码的实现部分,类似于 jdk 中的各种数据结构。当然 jdk 中只是常见的,我们可以整理一些常用的:
编码+练习
这个主要对应我们这个部分。这个系列主要事件做一下一下 leetcode 中的各种数据结构
知行合一
实践应用
这个是最后一个部分,各种数据结构的应用。
这个贯穿到我们日常的项目开发的方方面面,暂时不做展开。
当然,自己的一些项目其实用到了这些基础的知识,后面可以结合起来说一说。
leetcode 分类
leetcode 中的常见算法题,按照数据结构和算法分类的话:
我们后续的学习将把理论+题目+实践结合起来。
希望做一个不一样的专题,而不是题目刷完就忘记,理论学完不知道有什么用的割裂的常态。
按数据结构分类
-
数组 (Array)
-
字符串 (String)
-
哈希表 (Hash Table)
- 树 (Tree)
- 二叉搜索树
- 线段树
- 树状数组
- 字典树
-
堆(优先队列) (Heap/Priority Queue)
- 栈 (Stack)
- 单调栈
-
队列 (Queue)
-
链表 (Linked List)
- 图 (Graph)
- 拓扑排序
- 最小生成树
- 欧拉回路
- 强连通分量
- 双连通分量
-
单调队列 (Monotonic Queue)
-
双向链表 (Doubly Linked List)
-
数据流 (Data Stream)
- 迭代器 (Iterator)
按算法分类
-
双指针 (Two Pointers)
-
动态规划 (Dynamic Programming)
- 数学 (Mathematics)
- 博弈
- 排序 (Sorting)
- 快速选择
- 基数排序
- Shell 排序
- 归并排序
- 桶排序
-
贪心算法 (Greedy Algorithm)
-
深度优先搜索 (DFS)
-
二分查找 (Binary Search)
-
回溯算法 (Backtracking)
-
滑动窗口 (Sliding Window)
-
分治法 (Divide and Conquer)
-
计数 (Counting)
-
组合数学 (Combinatorial Mathematics)
-
递归 (Recursion)
-
前缀和 (Prefix Sum)
-
模拟 (Simulation)
-
设计 (Design)
-
记忆化搜索 (Memoization)
-
状态压缩 (State Compression)
-
拓扑排序 (Topological Sorting)
-
字符串匹配 (String Matching)
-
最短路 (Shortest Path)
-
滚动哈希 (Rolling Hash)
-
概率与统计 (Probability and Statistics)
-
多线程 (Multithreading)
-
随机化 (Randomization)
-
扫描线 (Sweep Line)
-
水塘抽样 (Reservoir Sampling)
-
计数排序 (Counting Sort)
- 拒绝采样 (Rejection Sampling)
总结
上述分类将 LeetCode 问题按照数据结构和算法进行细分。
不同的数据结构(如数组、链表、堆、图等)和算法(如动态规划、贪心算法、深度优先搜索等)各自处理特定类型的计算任务。