Skip to content

Commit 9536f4b

Browse files
committed
🎉 add: 概览
1 parent c462385 commit 9536f4b

File tree

7 files changed

+191
-1
lines changed

7 files changed

+191
-1
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
99
练好数据结构和算法,非一日之功💪。欢迎`Star`✨或`Watch`👀我们共同进步。
1010

11+
建议做题之前先阅读我这篇文章:[前端该如何准备数据结构和算法](https://juejin.im/post/5d5b307b5188253da24d3cd1),帮助你更高效的学习。
12+
1113
为了更好的阅读体验可以到:http://www.conardli.top/docs/ 阅读。
1214

1315
<a href="http://www.conardli.top/docs/" class="item" >
@@ -20,7 +22,6 @@
2022
## 来源分类
2123

2224
- [剑指offer](/剑指offer)
23-
2425
- [leetcode](/leetcode)
2526

2627
## JavaScript专题
@@ -53,6 +54,7 @@
5354

5455
## 二叉树
5556

57+
- [二叉树-概览](/数据结构分类/二叉树/二叉树.md)
5658
- [二叉树的基本操作](/数据结构分类/二叉树/二叉树的基本操作.md)⭐⭐
5759
- [二叉树的中序遍历](/数据结构分类/二叉树/二叉树的中序遍历.md)⭐⭐
5860
- [二叉树的前序遍历](/数据结构分类/二叉树/二叉树的前序遍历.md)⭐⭐
@@ -77,6 +79,7 @@
7779

7880
## 链表
7981

82+
- [链表-概览](/数据结构分类/链表/链表.md)
8083
- [删除链表中的节点or重复的节点](/数据结构分类/链表/删除链表中的节点or重复的节点.md)⭐⭐
8184
- [从尾到头打印链表](/数据结构分类/链表/从尾到头打印链表.md)⭐⭐
8285
- [链表倒数第k个节点](/数据结构分类/链表/链表倒数第k个节点.md)⭐⭐
@@ -97,13 +100,15 @@
97100

98101
## 栈和队列
99102

103+
- [栈和队列-概览](/数据结构分类/栈和队列/栈和队列.md)
100104
- [用两个栈实现队列](/数据结构分类/栈和队列/用两个栈实现队列.md)⭐⭐
101105
- [包含min函数的栈](/数据结构分类/栈和队列/包含min函数的栈.md)⭐⭐
102106
- [栈的压入弹出序列](/数据结构分类/栈和队列/栈的压入弹出序列.md)⭐⭐
103107
- [滑动窗口的最大值](/数据结构分类/栈和队列/滑动窗口的最大值.md)⭐⭐⭐
104108

105109
## 数组
106110

111+
- [数组-概览](/数据结构分类/数组/数组.md)
107112
- [调整数组顺序使奇数位于偶数前面](/数据结构分类/数组/调整数组顺序使奇数位于偶数前面.md) ⭐⭐
108113
- [在排序数组中查找数字](/数据结构分类/数组/在排序数组中查找数字.md)⭐⭐
109114
- [数组中出现次数超过数组长度一半的数字](/数据结构分类/数组/数组中出现次数超过数组长度一半的数字.md)⭐⭐
@@ -122,10 +127,16 @@
122127

123128
##
124129

130+
- [堆-概览](/数据结构分类/堆/堆表.md)
125131
- [堆的基本操作](/数据结构分类/堆/堆的基本操作.md)⭐⭐⭐
126132
- [数据流中的中位数](/数据结构分类/堆/数据流中的中位数.md)⭐⭐⭐
127133
- [最小的k个数](/数据结构分类/堆/最小的k个数.md)⭐⭐⭐
128134

135+
136+
## 哈希表
137+
138+
- [哈希表-概览](/数据结构分类/哈希表/哈希表.md)
139+
129140
## 分治
130141

131142
- [数组中的逆序对](/算法分类/分治/数组中的逆序对.md)⭐⭐⭐
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
2+
树是用来模拟具有树状结构性质的数据集合。根据它的特性可以分为非常多的种类,对于我们来讲,掌握二叉树这种结构就足够了,它也是树最简单、应用最广泛的种类。
3+
4+
> 二叉树是一种典型的树树状结构。如它名字所描述的那样,二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。
5+
6+
![](https://i.loli.net/2019/08/18/3HdPxIMFOQv9yEz.jpg)
7+
8+
### 二叉树遍历
9+
10+
> 重点中的重点,最好同时掌握递归和非递归版本,递归版本很容易书写,但是真正考察基本功的是非递归版本。
11+
12+
- [二叉树的中序遍历](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E4%B8%AD%E5%BA%8F%E9%81%8D%E5%8E%86.html)
13+
- [二叉树的前序遍历](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%89%8D%E5%BA%8F%E9%81%8D%E5%8E%86.html)
14+
- [二叉树的后序遍历](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%90%8E%E5%BA%8F%E9%81%8D%E5%8E%86.html)
15+
16+
> 根据前序遍历和中序遍历的特点重建二叉树,逆向思维,很有意思的题目
17+
18+
- [重建二叉树](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E9%87%8D%E5%BB%BA%E4%BA%8C%E5%8F%89%E6%A0%91.html)
19+
- [求二叉树的遍历](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E9%87%8D%E5%BB%BA%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E9%A2%98%E7%9B%AE2-%E6%B1%82%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%86)
20+
21+
22+
### 二叉树的对称性
23+
24+
- [对称的二叉树](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E5%AF%B9%E7%A7%B0%E7%9A%84%E4%BA%8C%E5%8F%89%E6%A0%91.html)
25+
- [二叉树的镜像](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%95%9C%E5%83%8F.html)
26+
27+
### 二叉搜索树
28+
29+
> 二叉搜索树是特殊的二叉树,考察二叉搜索树的题目一般都是考察二叉搜索树的特性,所以掌握好它的特性很重要。
30+
31+
1. 若任意节点的左⼦子树不不空,则左⼦子树上所有结点的值均⼩小于它的 根结点的值;
32+
2. 若任意节点的右⼦子树不不空,则右⼦子树上所有结点的值均⼤大于它的 根结点的值;
33+
3. 任意节点的左、右⼦子树也分别为⼆二叉查找树。
34+
35+
36+
- [二叉搜索树的第k个节点](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E7%AC%ACk%E4%B8%AA%E8%8A%82%E7%82%B9.html#%E9%A2%98%E7%9B%AE)
37+
- [二叉搜索树的后序遍历](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E5%90%8E%E5%BA%8F%E9%81%8D%E5%8E%86.html)
38+
39+
### 二叉树的深度
40+
41+
> 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
42+
43+
> 平衡二叉树:左右子树深度之差大于1
44+
45+
- [二叉树的最大深度](http://www.conardli.top/docs/dataStructure/二叉树/二叉树的最大深度.html)
46+
- [二叉树的最小深度](http://www.conardli.top/docs/dataStructure/二叉树/二叉树的最小深度.html#考察点)
47+
- [平衡二叉树](http://www.conardli.top/docs/dataStructure/%E4%BA%8C%E5%8F%89%E6%A0%91/%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
哈希的基本原理是将给定的键值转换为偏移地址来检索记录。
3+
4+
键转换为地址是通过一种关系(公式)来完成的,这就是哈希(散列)函数。
5+
6+
虽然哈希表是一种有效的搜索技术,但是它还有些缺点。两个不同的关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。发生冲突的两个关键字称为该哈希函数的同义词。
7+
8+
![](https://i.loli.net/2019/08/18/B2Ss9kyndzZ1LCA.png)
9+
10+
> 如何设计哈希函数以及如何避免冲突就是哈希表的常见问题。
11+
> 好的哈希函数的选择有两条标准:
12+
13+
- 1.简单并且能够快速计算
14+
- 2.能够在址空间中获取键的均匀人分布
15+
16+
例如下面的题目:
17+
18+
- [常数时间插入、删除和获取随机元素](https://leetcode-cn.com/problems/insert-delete-getrandom-o1/)
19+
20+
> 当用到哈希表时我们通常是要开辟一个额外空间来记录一些计算过的值,同时我们又要在下一次计算的过程中快速检索到它们,例如上面提到的两数之和、三数之和等都利用了这种思想。
21+
22+
- [两数之和](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html)
23+
- [三数之和](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html)
24+
- [字符流中第一个不重复的字符](http://www.conardli.top/docs/dataStructure/%E5%AD%97%E7%AC%A6%E4%B8%B2/%E5%AD%97%E7%AC%A6%E6%B5%81%E4%B8%AD%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%B8%8D%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%97%E7%AC%A6.html#%E6%80%9D%E8%B7%AF)
25+
- [宝石与石头](https://leetcode-cn.com/problems/jewels-and-stones/)

数据结构分类/堆/堆.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
![](https://i.loli.net/2019/08/16/GNxSRQlrfBieOkY.png)
2+
3+
堆的底层实际上是一棵完全二叉树,可以用数组实现
4+
5+
- 每个的节点元素值不小于其子节点 - 最大堆
6+
- 每个的节点元素值不大于其子节点 - 最小堆
7+
8+
> 堆在处理某些特殊场景时可以大大降低代码的时间复杂度,例如在庞大的数据中找到最大的几个数或者最小的几个数,可以借助堆来完成这个过程。
9+
10+
- [堆的基本操作](http://www.conardli.top/docs/dataStructure/%E5%A0%86/%E5%A0%86%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C.html)
11+
- [数据流中的中位数](http://www.conardli.top/docs/dataStructure/%E5%A0%86/%E6%95%B0%E6%8D%AE%E6%B5%81%E4%B8%AD%E7%9A%84%E4%B8%AD%E4%BD%8D%E6%95%B0.html)
12+
- [最小的k个数](http://www.conardli.top/docs/dataStructure/%E5%A0%86/%E6%9C%80%E5%B0%8F%E7%9A%84k%E4%B8%AA%E6%95%B0.html)

数据结构分类/数组/数组.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
数组是我们在开发中最常见到的数据结构了,用于按顺序存储元素的集合。但是元素可以随机存取,因为数组中的每个元素都可以通过数组索引来识别。插入和删除时要移动后续元素,还要考虑扩容问题,插入慢。
3+
4+
数组与日常的业务开发联系非常紧密,如何巧妙的用好数组是我们能否开发出高质量代码的关键。
5+
6+
### 双指针
7+
8+
> 上面链表中提到的一类题目,主要是利用两个或多个不同位置的指针,通过速度和方向的变换解决问题。注意这种技巧经常在排序数组中使用。
9+
10+
- [调整数组顺序使奇数位于偶数前面](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E8%B0%83%E6%95%B4%E6%95%B0%E7%BB%84%E9%A1%BA%E5%BA%8F%E4%BD%BF%E5%A5%87%E6%95%B0%E4%BD%8D%E4%BA%8E%E5%81%B6%E6%95%B0%E5%89%8D%E9%9D%A2.html)
11+
- [和为S的两个数字](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E5%92%8C%E4%B8%BAS%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%95%B0%E5%AD%97.html)
12+
- [和为S的连续正整数序列](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E5%92%8C%E4%B8%BAS%E7%9A%84%E8%BF%9E%E7%BB%AD%E6%AD%A3%E6%95%B4%E6%95%B0%E5%BA%8F%E5%88%97.html)
13+
14+
15+
### N数之和问题
16+
17+
> 非常常见的问题,基本上都是一个套路,主要考虑如何比暴利法降低时间复杂度,而且也会用到上面的双指针技巧
18+
19+
- [两数之和](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html)
20+
- [三数之和](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html)
21+
- [四数之和](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E5%9B%9B%E6%95%B0%E4%B9%8B%E5%92%8C.html)
22+
23+
### 二维数组
24+
25+
> 建立一定的抽象建模能力,将实际中的很多问题进行抽象
26+
27+
- [构建乘积数组](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E6%9E%84%E5%BB%BA%E4%B9%98%E7%A7%AF%E6%95%B0%E7%BB%84.html)
28+
- [顺时针打印矩阵](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E9%A1%BA%E6%97%B6%E9%92%88%E6%89%93%E5%8D%B0%E7%9F%A9%E9%98%B5.html)
29+
30+
### 数据统计
31+
32+
> 数组少不了的就是统计和计算,此类问题考察如何用更高效的方法对数组进行统计计算。
33+
34+
- [数组中出现次数超过数组长度一半的数字](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E6%95%B0%E7%BB%84%E4%B8%AD%E5%87%BA%E7%8E%B0%E6%AC%A1%E6%95%B0%E8%B6%85%E8%BF%87%E6%95%B0%E7%BB%84%E9%95%BF%E5%BA%A6%E4%B8%80%E5%8D%8A%E7%9A%84%E6%95%B0%E5%AD%97.html)
35+
- [连续子数组的最大和](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E8%BF%9E%E7%BB%AD%E5%AD%90%E6%95%B0%E7%BB%84%E7%9A%84%E6%9C%80%E5%A4%A7%E5%92%8C.html)
36+
- [扑克牌顺子](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E6%89%91%E5%85%8B%E7%89%8C%E9%A1%BA%E5%AD%90.html)
37+
- [第一个只出现一次的字符](http://www.conardli.top/docs/dataStructure/%E6%95%B0%E7%BB%84/%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8F%AA%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1%E7%9A%84%E5%AD%97%E7%AC%A6.html)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
在上面的数组中,我们可以通过索引随机访问元素,但是在某些情况下,我们可能要限制数据的访问顺序,于是有了两种限制访问顺序的数据结构:栈(后进后出)、队列(先进先出)
3+
4+
![](https://i.loli.net/2019/08/18/xqbQD8UEW1cRPFs.jpg)
5+
6+
7+
- [队列和栈的互相实现](http://www.conardli.top/docs/dataStructure/栈和队列/用两个栈实现队列.html#题目)
8+
- [包含min函数的栈](http://www.conardli.top/docs/dataStructure/%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/%E5%8C%85%E5%90%ABmin%E5%87%BD%E6%95%B0%E7%9A%84%E6%A0%88.html)
9+
- [栈的压入弹出序列](http://www.conardli.top/docs/dataStructure/%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/%E6%A0%88%E7%9A%84%E5%8E%8B%E5%85%A5%E5%BC%B9%E5%87%BA%E5%BA%8F%E5%88%97.html)
10+
- [滑动窗口最大值](http://www.conardli.top/docs/dataStructure/%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E7%9A%84%E6%9C%80%E5%A4%A7%E5%80%BC.html)
11+
- [接雨水](https://leetcode-cn.com/problems/trapping-rain-water/)
12+

数据结构分类/链表/链表.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
3+
用一组任意存储的单元来存储线性表的数据元素。一个对象存储着本身的值和下一个元素的地址。
4+
5+
- 需要遍历才能查询到元素,查询慢。
6+
- 插入元素只需断开连接重新赋值,插入快。
7+
8+
![](https://i.loli.net/2019/08/18/K7ysIF3qXzTJxUN.jpg)
9+
10+
链表在开发中也是经常用到的数据结构,`React16``Fiber Node`连接起来形成的`Fiber Tree`, 就是个单链表结构。
11+
12+
### 基本应用
13+
14+
> 主要是对链表基本概念和特性的应用,如果基础概念掌握牢靠,此类问题即可迎刃而解
15+
16+
- [从尾到头打印链表](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E4%BB%8E%E5%B0%BE%E5%88%B0%E5%A4%B4%E6%89%93%E5%8D%B0%E9%93%BE%E8%A1%A8.html)
17+
- [删除链表中的节点](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9or%E9%87%8D%E5%A4%8D%E7%9A%84%E8%8A%82%E7%82%B9.html#%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9)
18+
- [反转链表](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E5%8F%8D%E8%BD%AC%E9%93%BE%E8%A1%A8.html)
19+
- [复杂链表的复制](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E5%A4%8D%E6%9D%82%E9%93%BE%E8%A1%A8%E7%9A%84%E5%A4%8D%E5%88%B6.html)
20+
21+
### 环类题目
22+
23+
> 环类题目即从判断一个单链表是否存在循环而扩展衍生的问题
24+
25+
- [环形链表](https://leetcode-cn.com/explore/learn/card/linked-list/194/two-pointer-technique/744/)
26+
- [链表环的入口节点](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%8E%AF%E7%9A%84%E5%85%A5%E5%8F%A3%E8%8A%82%E7%82%B9.html)
27+
- [约瑟夫环](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E5%9C%88%E5%9C%88%E4%B8%AD%E6%9C%80%E5%90%8E%E5%89%A9%E4%B8%8B%E7%9A%84%E6%95%B0%E5%AD%97.html)
28+
29+
### 双指针
30+
31+
> 双指针的思想在链表和数组中的题目都经常会用到,主要是利用两个或多个不同位置的指针,通过速度和方向的变换解决问题。
32+
33+
- 两个指针从不同位置出发:一个从始端开始,另一个从末端开始;
34+
- 两个指针以不同速度移动:一个指针快一些,另一个指针慢一些。
35+
36+
对于单链表,因为我们只能在一个方向上遍历链表,所以第一种情景可能无法工作。然而,第二种情景,也被称为慢指针和快指针技巧,是非常有用的。
37+
38+
- [两个链表的公共节点](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%85%AC%E5%85%B1%E8%8A%82%E7%82%B9.html)
39+
- [链表倒数第k个节点](http://www.conardli.top/docs/dataStructure/%E9%93%BE%E8%A1%A8/%E9%93%BE%E8%A1%A8%E5%80%92%E6%95%B0%E7%AC%ACk%E4%B8%AA%E8%8A%82%E7%82%B9.html)
40+
- [相交链表](https://leetcode-cn.com/explore/learn/card/linked-list/194/two-pointer-technique/746/)
41+
42+
### 双向链表
43+
44+
双链还有一个引用字段,称为`prev`字段。有了这个额外的字段,您就能够知道当前结点的前一个结点。
45+
46+
- [扁平化多级双向链表](https://leetcode-cn.com/explore/learn/card/linked-list/197/conclusion/764/)

0 commit comments

Comments
 (0)