Skip to content

Commit 570ab4b

Browse files
committed
更新 01.01 数据结构与算法简介、LeetCode 入门及攻略 相关图片、图片标题
1 parent 2320e92 commit 570ab4b

15 files changed

+24
-24
lines changed

docs/ch01/01.01/01.01.01-Data-Structures-Algorithms.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 01.01.01 数据结构与算法(第 01 ~ 02 天)
22

3-
![](../../images/202109092112373.png)
3+
![程序=算法+数据结构](../../images/202109092112373.png)
44

55
> 数据结构是程序的骨架,而算法则是程序的灵魂。
66
@@ -48,23 +48,23 @@
4848
4949
集合结构中的数据元素是无序的,并且每个数据元素都是唯一的,集合中没有相同的数据元素。集合结构很像数学意义上的「集合」。
5050

51-
![](../../images/202109092116404.png)
51+
![集合结构](../../images/20240509150647.png)
5252

5353
#### 2. 线性结构
5454

5555
> **线性结构**:数据元素之间是「一对一」关系。
5656
5757
线性结构中的数据元素(除了第一个和最后一个元素),左侧和右侧分别只有一个数据与其相邻。线性结构类型包括:数组、链表,以及由它们衍生出来的栈、队列、哈希表。
5858

59-
![](../../images/202109092117492.png)
59+
![线性结构](../../images/20240509150709.png)
6060

6161
#### 3. 树形结构
6262

6363
> **树形结构**:数据元素之间是「一对多」的层次关系。
6464
6565
最简单的树形结构是二叉树。这种结构可以简单的表示为:根, 左子树, 右子树。 左子树和右子树又有自己的子树。当然除了二叉树,树形结构类型还包括:多叉树、字典树等。
6666

67-
![](../../images/202109092118089.png)
67+
![树形结构](../../images/20240509150724.png)
6868

6969
#### 4. 图形结构
7070

@@ -74,7 +74,7 @@
7474

7575
在图形结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。图形结构类型包括:无向图、有向图、连通图等。
7676

77-
![](../../images/202109092119090.png)
77+
![图形结构](../../images/20240509150831.png)
7878

7979
### 1.2 数据的物理结构
8080

@@ -86,7 +86,7 @@
8686

8787
> **顺序存储结构(Sequential Storage Structure)**:将数据元素存放在一片地址连续的存储单元里,数据元素之间的逻辑关系通过数据元素的存储地址来直接反映。
8888
89-
![](../../images/202109092121742.png)
89+
![顺序存储结构](../../images/20240509150846.png)
9090

9191
在顺序存储结构中,逻辑上相邻的数据元素在物理地址上也必然相邻 。
9292

@@ -96,7 +96,7 @@
9696

9797
> **链式存储结构(Linked Storage Structure)**:将数据元素存放在任意的存储单元里,存储单元可以连续,也可以不连续。
9898
99-
![](../../images/202109092120553.png)
99+
![链式存储结构](../../images/20240509150902.png)
100100

101101
链式存储结构中,逻辑上相邻的数据元素在物理地址上可能相邻,可也能不相邻。其在物理地址上的表现是随机的。链式存储结构中,一般将每个数据元素占用的若干单元的组合称为一个链结点。每个链结点不仅要存放一个数据元素的数据信息,还要存放一个指出这个数据元素在逻辑关系的直接后继元素所在链结点的地址,该地址被称为指针。换句话说,数据元素之间的逻辑关系是通过指针来间接反映的。
102102

@@ -133,7 +133,7 @@
133133
> **解决方法**
134134
>
135135
> 1. 用计算器从 $1$ 开始,不断向右依次加上 $2$,再加上 $3$,...,依次加到 $100$,得出结果为 $5050$。
136-
> 2. 根据高斯求和公式:**和 = (首项 + 末项) × 项数 / 2**,直接算出结果为:$\frac{(1 + 100) \times 100}{2} = 5050$。
136+
> 2. 根据高斯求和公式:**和 = (首项 + 末项) × 项数 ÷ 2**,直接算出结果为:$\frac{(1+100) \times 100}{2} = 5050$。
137137
138138
- 示例 3:
139139

docs/ch01/01.01/01.01.02-Algorithm-Complexity.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def algorithm(n):
5151
return fact
5252
```
5353

54-
把上述算法中所有语句的执行次数加起来 $1 + n + n + 1 = 2 \times n + 2$,可以用一个函数 $f(n)$ 来表达语句的执行次数:$f(n) = 2n + 2$。
54+
把上述算法中所有语句的执行次数加起来 $1 + n + n + 1 = 2n + 2$,可以用一个函数 $f(n)$ 来表达语句的执行次数:$f(n) = 2n + 2$。
5555

5656
则时间复杂度的函数可以表示为:$T(n) = O(f(n))$。它表示的是随着问题规模 n 的增大,算法执行时间的增长趋势跟 $f(n)$ 相同。$O$ 是一种渐进符号,$T(n)$ 称作算法的 **渐进时间复杂度(Asymptotic Time Complexity)**,简称为 **时间复杂度**
5757

@@ -69,7 +69,7 @@ def algorithm(n):
6969
7070
也就是说,如果函数 $f(n) = \Theta(g(n))$,那么我们能找到两个正数 $c_1$、$c_2$,使得 $f(n)$ 被 $c_1 \cdot g(n)$ 和 $c_2 \cdot g(n)$ 夹在中间。
7171

72-
例如:$T(n) = 3 \times n^2 + 4 \times n + 5 = \Theta(n^2)$,可以找到 $c_1 = 1$,$c_2 = 12$,$n_0 = 1$,使得对于所有 $n \ge 1$,都有 $n^2 \le 3 \times n^2 + 4 \times n + 5 \le 12 \times n^2$。
72+
例如:$T(n) = 3n^2 + 4n + 5 = \Theta(n^2)$,可以找到 $c_1 = 1$,$c_2 = 12$,$n_0 = 1$,使得对于所有 $n \ge 1$,都有 $n^2 \le 3n^2 + 4n + 5 \le 12n^2$。
7373

7474
#### 2.2.2 $O$ 渐进上界符号
7575

@@ -83,7 +83,7 @@ $\Theta$ 符号渐进地给出了一个函数的上界和下界,如果我们
8383
8484
同样,如果我们只知道函数的下界,可以使用 $\Omega$ 渐进下界符号。
8585

86-
![](../../images/202109092356694.png)
86+
![$\Theta$、$O$ 和 $\Omega$ 记号对比](../../images/202109092356694.png)
8787

8888
### 2.3 时间复杂度计算
8989

@@ -103,11 +103,11 @@ $\Theta$ 符号渐进地给出了一个函数的上界和下界,如果我们
103103

104104
- **加法原则**:总的时间复杂度等于量级最大的基本语句的时间复杂度。
105105

106-
如果 $T_1(n) = O(f_1(n))$,$T_2(n) = O(f_2(n))$,$T(n) = T_1(n) + T_2(n)$,则 $T(n) = O(f(n)) = max(O(f_1(n)), O(f_2(n))) = O(max(f_1(n), f_2(n)))$。
106+
如果 $T_1(n) = O(f_1(n))$,$T_2(n) = O(f_2(n))$,$T(n) = T_1(n) + T_2(n)$,则 $T(n) = O(f(n)) = max(O(f_1(n)), \enspace O(f_2(n))) = O(max(f_1(n), \enspace f_2(n)))$。
107107

108108
- **乘法原则**:循环嵌套代码的复杂度等于嵌套内外基本语句的时间复杂度乘积。
109109

110-
如果 $T_1 = O(f_1(n))$,$T_2 = O(f_2(n))$,$T(n) = T_1(n)T_2(n)$,则 $T(n) = O(f(n)) = O(f_1(n))O(f_2(n)) = O(f_1(n)f_2(n))$。
110+
如果 $T_1 = O(f_1(n))$,$T_2 = O(f_2(n))$,$T(n) = T_1(n) \times T_2(n)$,则 $T(n) = O(f(n)) = O(f_1(n)) \times O(f_2(n)) = O(f_1(n) \times f_2(n))$。
111111

112112
下面通过实例来说明如何计算时间复杂度。
113113

@@ -303,4 +303,4 @@ def algorithm(n):
303303
- 【文章】[复杂度分析 - 数据结构与算法之美 王争](https://time.geekbang.org/column/intro/126)
304304
- 【文章】[算法复杂度(时间复杂度+空间复杂度)](https://www.biancheng.net/algorithm/complexity.html)
305305
- 【文章】[算法基础 - 复杂度 - OI Wiki](https://oi-wiki.org/basic/complexity/)
306-
- 【文章】[图解算法数据结构 - 算法复杂度 - LeetBook - 力扣](https://leetcode.cn/leetbook/read/illustration-of-algorithm/r84gmi/)
306+
- 【文章】[图解算法数据结构 - 算法复杂度 - LeetBook - 力扣](https://leetcode.cn/leetbook/read/illustration-of-algorithm/r84gmi/)

docs/ch01/01.01/01.01.03-LeetCode-Guide.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,37 @@ LeetCode 上有 $3000+$ 道的编程问题,支持 $16+$ 种编程语言(C、
1818
2. 输入手机号,获取验证码。
1919
3. 输入验证码之后,点击「登录 / 注册」,就注册好了。
2020

21-
![](../../images/20210901155409.png)
21+
![LeetCode 注册页面](../../images/20210901155409.png)
2222

2323
### 2.2 LeetCode 题库
2424

2525
[题库](https://leetcode.cn/problemset/algorithms/)」是 LeetCode 上最直接的练习入口,在这里可以根据题目的标签、难度、状态进行刷题。也可以按照随机一题开始刷题。
2626

27-
![](../../images/20210901155423.png)
27+
![LeetCode 题库页面](../../images/20210901155423.png)
2828

2929
#### 1. 题目标签
3030

3131
LeetCode 的题目涉及了许多算法和数据结构。有贪心,搜索,动态规划,链表,二叉树,哈希表等等,可以通过选择对应标签进行专项刷题,同时也可以看到对应专题的完成度情况。
3232

33-
![](../../images/20210901155435.png)
33+
![LeetCode 题目标签](../../images/20210901155435.png)
3434

3535
#### 2. 题目列表
3636

3737
LeetCode 提供了题目的搜索过滤功能。可以筛选相关题单、不同难易程度、题目完成状态、不同标签的题目。还可以根据题目编号、题解数目、通过率、难度、出现频率等进行排序。
3838

39-
![](../../images/20210901155450.png)
39+
![LeetCode 题目列表](../../images/20210901155450.png)
4040

4141
#### 3. 当前进度
4242

4343
当前进度提供了一个直观的进度展示。在这里可以看到自己的练习概况。进度会自动展现当前的做题情况。也可以点击「[进度设置](https://leetcode.cn/session/)」创建新的进度,在这里还可以修改、删除相关的进度。
4444

45-
![](../../images/20210901155500.png)
45+
![LeetCode 当前进度](../../images/20210901155500.png)
4646

4747
#### 4. 题目详情
4848

4949
从题目大相关题目点击进去,就可以看到这道题目的内容描述和代码编辑器。在这里还可以查看相关的题解和自己的提交记录。
5050

51-
![](../../images/20210901155529.png)
51+
![LeetCode 题目详情](../../images/20210901155529.png)
5252

5353
### 2.3 LeetCode 刷题语言
5454

@@ -64,13 +64,13 @@ LeetCode 提供了题目的搜索过滤功能。可以筛选相关题单、不
6464

6565
在「2.2 LeetCode 题库 —— 4. 题目详情」中我们介绍了题目的相关情况。
6666

67-
![](../../images/20210901155529.png)
67+
![LeetCode 题目详情](../../images/20210901155529.png)
6868

6969
可以看到左侧区域为题目内容描述区域,在这里可以看到题目的内容描述和一些示例数据。而右侧是代码编辑区域,代码编辑区域里边默认显示了待实现的方法。
7070

7171
我们需要在代码编辑器中根据方法给定的参数实现对应的算法,并返回题目要求的结果。然后还要经过「执行代码」测试结果,点击「提交」后,显示执行结果为「**通过**」时,才算完成一道题目。
7272

73-
![](../../images/20210901155545.png)
73+
![LeetCode 提交记录](../../images/20210901155545.png)
7474

7575
总结一下我们的刷题流程为:
7676

@@ -148,7 +148,7 @@ class Solution:
148148

149149
##### 思路 2:哈希表
150150

151-
哈希表中键值对信息为 $target-nums[i]: i$,其中 $i$ 为下标。
151+
哈希表中键值对信息为 $target-nums[i] :i,其中 $i$ 为下标。
152152

153153
1. 遍历数组,对于每一个数 $nums[i]$:
154154
1. 先查找字典中是否存在 $target - nums[i]$,存在则输出 $target - nums[i]$ 对应的下标和当前数组的下标 $i$。
@@ -307,4 +307,4 @@ LeetCode 的题目序号并不是按照难易程度进行排序的,所以除
307307
- 【文章】[What is LeetCode? - Quora](https://www.quora.com/What-is-Leetcode)
308308
- 【文章】[LeetCode 帮助中心 - 力扣(LeetCode)](https://support.leetcode-cn.com/hc/)
309309
- 【回答】[刷 leetcode 使用 python 还是 c++? - 知乎](https://www.zhihu.com/question/319448129)
310-
- 【回答】[刷完 LeetCode 是什么水平?能拿到什么水平的 offer? - 知乎](https://www.zhihu.com/question/32019460)
310+
- 【回答】[刷完 LeetCode 是什么水平?能拿到什么水平的 offer? - 知乎](https://www.zhihu.com/question/32019460)

docs/images/202109092116404.png

-11.8 KB
Binary file not shown.

docs/images/202109092117492.png

-3.38 KB
Binary file not shown.

docs/images/202109092118089.png

-11.5 KB
Binary file not shown.

docs/images/202109092119090.png

-11.8 KB
Binary file not shown.

docs/images/202109092120553.png

-3.64 KB
Binary file not shown.

docs/images/202109092121742.png

-3.29 KB
Binary file not shown.

docs/images/20240509150647.png

10.2 KB
Loading

0 commit comments

Comments
 (0)