数据结构+算法

一般而言,二者是相辅相成的。

所以需要结合起来学习。

创作目的

知行合一。

系统的学习+练习一下数据结构+算法。

修炼一下内力。

数据结构专题

大概分为几个类别:

  1. 理论知识

  2. 源码学习

  3. 数据结构实现

  4. 题目练习

  5. 项目应用

理论

其中 1/2 非常偏理论,会导致很枯燥。

主要见:数据结构 00 概览 数据结构专题汇总

理论+编码

2+3 构成了源码的实现部分,类似于 jdk 中的各种数据结构。当然 jdk 中只是常见的,我们可以整理一些常用的:

数据结构源码实现

编码+练习

这个主要对应我们这个部分。这个系列主要事件做一下一下 leetcode 中的各种数据结构

知行合一

实践应用

这个是最后一个部分,各种数据结构的应用。

这个贯穿到我们日常的项目开发的方方面面,暂时不做展开。

当然,自己的一些项目其实用到了这些基础的知识,后面可以结合起来说一说。

leetcode 分类

leetcode 中的常见算法题,按照数据结构和算法分类的话:

我们后续的学习将把理论+题目+实践结合起来。

希望做一个不一样的专题,而不是题目刷完就忘记,理论学完不知道有什么用的割裂的常态。

按数据结构分类

  1. 数组 (Array)

  2. 字符串 (String)

  3. 哈希表 (Hash Table)

  4. 树 (Tree)
    • 二叉搜索树
    • 线段树
    • 树状数组
    • 字典树
  5. 堆(优先队列) (Heap/Priority Queue)

  6. 栈 (Stack)
    • 单调栈
  7. 队列 (Queue)

  8. 链表 (Linked List)

  9. 图 (Graph)
    • 拓扑排序
    • 最小生成树
    • 欧拉回路
    • 强连通分量
    • 双连通分量
  10. 单调队列 (Monotonic Queue)

  11. 双向链表 (Doubly Linked List)

  12. 数据流 (Data Stream)

  13. 迭代器 (Iterator)

按算法分类

  1. 双指针 (Two Pointers)

  2. 动态规划 (Dynamic Programming)

  3. 数学 (Mathematics)
    • 博弈
  4. 排序 (Sorting)
    • 快速选择
    • 基数排序
    • Shell 排序
    • 归并排序
    • 桶排序
  5. 贪心算法 (Greedy Algorithm)

  6. 深度优先搜索 (DFS)

  7. 二分查找 (Binary Search)

  8. 回溯算法 (Backtracking)

  9. 滑动窗口 (Sliding Window)

  10. 分治法 (Divide and Conquer)

  11. 计数 (Counting)

  12. 组合数学 (Combinatorial Mathematics)

  13. 递归 (Recursion)

  14. 前缀和 (Prefix Sum)

  15. 模拟 (Simulation)

  16. 设计 (Design)

  17. 记忆化搜索 (Memoization)

  18. 状态压缩 (State Compression)

  19. 拓扑排序 (Topological Sorting)

  20. 字符串匹配 (String Matching)

  21. 最短路 (Shortest Path)

  22. 滚动哈希 (Rolling Hash)

  23. 概率与统计 (Probability and Statistics)

  24. 多线程 (Multithreading)

  25. 随机化 (Randomization)

  26. 扫描线 (Sweep Line)

  27. 水塘抽样 (Reservoir Sampling)

  28. 计数排序 (Counting Sort)

  29. 拒绝采样 (Rejection Sampling)

总结

上述分类将 LeetCode 问题按照数据结构和算法进行细分。

不同的数据结构(如数组、链表、堆、图等)和算法(如动态规划、贪心算法、深度优先搜索等)各自处理特定类型的计算任务。