Skip to content

Commit 50623e1

Browse files
committed
更新 01. 数组 相关图片、图片标题
1 parent 24fb09a commit 50623e1

14 files changed

+45
-50
lines changed

Contents/01.Array/01.Array-Basic/01.Array-Basic.md

+2-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
以整数数组为例,数组的存储方式如下图所示。
1010

11-
![数组](https://qcdn.itcharge.cn/images/20210913163542.png)
11+
![数组](https://qcdn.itcharge.cn/images/202405091955166.png)
1212

1313
如上图所示,假设数据元素的个数为 $n$,则数组中的每一个数据元素都有自己的下标索引,下标索引从 $0$ 开始,到 $n - 1$ 结束。数组中的每一个「下标索引」,都有一个与之相对应的「数据元素」。
1414

@@ -37,7 +37,7 @@
3737

3838
以二维数组为例,数组的形式如下图所示。
3939

40-
![二维数组](https://qcdn.itcharge.cn/images/20210916222435.png)
40+
![二维数组](https://qcdn.itcharge.cn/images/202405091957859.png)
4141

4242
二维数组是一个由 $m$ 行 $n$ 列数据元素构成的特殊结构,其本质上是以数组作为数据元素的数组,即 **「数组的数组」**。二维数组的第一维度表示行,第二维度表示列。
4343

@@ -235,17 +235,9 @@ print(arr)
235235
## 参考资料
236236

237237
- 【文章】[数据结构中的数组和不同语言中数组的区别 - CSDN 博客](https://blog.csdn.net/sinat_14913533/article/details/102763573)
238-
239238
- 【文章】[数组理论基础 - 代码随想录](https://programmercarl.com/数组理论基础.html#数组理论基础)
240-
241239
- 【文章】[Python 与 Java 中容器对比:List - 知乎](https://zhuanlan.zhihu.com/p/120312437)
242-
243240
- 【文章】[什么是数组 - 漫画算法 - 小灰的算法之旅 - 力扣](https://leetcode.cn/leetbook/read/journey-of-algorithm/5ozchs/)
244-
245241
- 【文章】[数组 - 数据结构与算法之美 - 极客时间](https://time.geekbang.org/column/intro/100017301)
246-
247242
- 【书籍】数据结构教程 第 2 版 - 唐发根 著
248-
249243
- 【书籍】数据结构与算法 Python 语言描述 - 裘宗燕 著
250-
251-

Contents/01.Array/02.Array-Sort/01.Array-Bubble-Sort.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@
6262
4. 经过第 $2$ 趟排序,使得数组中第 $2$ 个值最大元素被安置在第 $n$ 个位置上。
6363
3. 依次类推,重复上述「冒泡」过程,直到某一趟排序过程中不出现元素交换位置的动作,则排序结束。
6464

65-
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下冒泡排序的整个过程
65+
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下冒泡排序算法的整个步骤
6666

67-
![冒泡排序](http://qcdn.itcharge.cn/images/20230816154510.png)
67+
![冒泡排序算法步骤](https://qcdn.itcharge.cn/images/20230816154510.png)
6868

6969
## 3. 冒泡排序代码实现
7070

Contents/01.Array/02.Array-Sort/02.Array-Selection-Sort.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -21,37 +21,37 @@
2121
3. 此时,$[0, 1]$ 为已排序区间,$[2, n - 1]$(总共 $n - 2$ 个元素)为未排序区间。
2222
4. 依次类推,对剩余未排序区间重复上述选择过程,直到所有元素都划分到已排序区间,排序结束。
2323

24-
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下选择排序的整个过程
24+
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下选择排序的整个步骤
2525

2626
::: tabs#selectionSort
2727

2828
@tab <1>
2929

30-
![选择排序 1](http://qcdn.itcharge.cn/images/20230816155042.png)
30+
![选择排序 1](https://qcdn.itcharge.cn/images/20230816155042.png)
3131

3232
@tab <2>
3333

34-
![选择排序 2](http://qcdn.itcharge.cn/images/20230816155017.png)
34+
![选择排序 2](https://qcdn.itcharge.cn/images/20230816155017.png)
3535

3636
@tab <3>
3737

38-
![选择排序 3](http://qcdn.itcharge.cn/images/20230816154955.png)
38+
![选择排序 3](https://qcdn.itcharge.cn/images/20230816154955.png)
3939

4040
@tab <4>
4141

42-
![选择排序 4](http://qcdn.itcharge.cn/images/20230816154924.png)
42+
![选择排序 4](https://qcdn.itcharge.cn/images/20230816154924.png)
4343

4444
@tab <5>
4545

46-
![选择排序 5](http://qcdn.itcharge.cn/images/20230816154859.png)
46+
![选择排序 5](https://qcdn.itcharge.cn/images/20230816154859.png)
4747

4848
@tab <6>
4949

50-
![选择排序 6](http://qcdn.itcharge.cn/images/20230816154836.png)
50+
![选择排序 6](https://qcdn.itcharge.cn/images/20230816154836.png)
5151

5252
@tab <7>
5353

54-
![选择排序 7](http://qcdn.itcharge.cn/images/20230816153324.png)
54+
![选择排序 7](https://qcdn.itcharge.cn/images/20230816153324.png)
5555

5656
:::
5757

Contents/01.Array/02.Array-Sort/03.Array-Insertion-Sort.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
4. 插入元素后有序区间变为 $[0, 2]$,无序区间变为 $[3, n - 1]$。
2525
4. 依次类推,对剩余无序区间中的元素重复上述插入过程,直到所有元素都插入到有序区间中,排序结束。
2626

27-
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下插入排序的整个过程
27+
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下插入排序算法的整个步骤
2828

29-
![插入排序](http://qcdn.itcharge.cn/images/20230816175619.png)
29+
![插入排序算法步骤](http://qcdn.itcharge.cn/images/20230816175619.png)
3030

3131
## 3. 插入排序代码实现
3232

Contents/01.Array/02.Array-Sort/04.Array-Shell-Sort.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
4. 减少间隔数,并重新将整个数组按新的间隔数分成若干个子数组,再分别对各个子数组进行排序。
1616
5. 依次类推,直到间隔数 $gap$ 值为 $1$,最后进行一次排序,排序结束。
1717

18-
我们以 $[7, 2, 6, 8, 0, 4, 1, 5, 9, 3]$ 为例,演示一下希尔排序的整个过程
18+
我们以 $[7, 2, 6, 8, 0, 4, 1, 5, 9, 3]$ 为例,演示一下希尔排序的整个步骤
1919

2020
::: tabs#shellSort
2121

Contents/01.Array/02.Array-Sort/05.Array-Merge-Sort.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
5. 将另一个子数组中的剩余元素存入到结果数组 $nums$ 中。
2121
6. 返回合并后的有序数组 $nums$。
2222

23-
我们以 $[0, 5, 7, 3, 1, 6, 8, 4]$ 为例,演示一下归并排序的整个过程
23+
我们以 $[0, 5, 7, 3, 1, 6, 8, 4]$ 为例,演示一下归并排序算法的整个步骤
2424

25-
![归并排序](http://qcdn.itcharge.cn/images/20230817103814.png)
25+
![归并排序算法步骤](http://qcdn.itcharge.cn/images/20230817103814.png)
2626

2727
## 3. 归并排序代码实现
2828

Contents/01.Array/02.Array-Sort/06.Array-Quick-Sort.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -28,37 +28,37 @@
2828

2929
@tab <1>
3030

31-
![哨兵划分 1](http://qcdn.itcharge.cn/images/20230818175908.png)
31+
![哨兵划分 1](https://qcdn.itcharge.cn/images/20230818175908.png)
3232

3333
@tab <2>
3434

35-
![哨兵划分 2](http://qcdn.itcharge.cn/images/20230818175922.png)
35+
![哨兵划分 2](https://qcdn.itcharge.cn/images/20230818175922.png)
3636

3737
@tab <3>
3838

39-
![哨兵划分 3](http://qcdn.itcharge.cn/images/20230818175952.png)
39+
![哨兵划分 3](https://qcdn.itcharge.cn/images/20230818175952.png)
4040

4141
@tab <4>
4242

43-
![哨兵划分 4](http://qcdn.itcharge.cn/images/20230818180001.png)
43+
![哨兵划分 4](https://qcdn.itcharge.cn/images/20230818180001.png)
4444

4545
@tab <5>
4646

47-
![哨兵划分 5](http://qcdn.itcharge.cn/images/20230818180009.png)
47+
![哨兵划分 5](https://qcdn.itcharge.cn/images/20230818180009.png)
4848

4949
@tab <6>
5050

51-
![哨兵划分 6](http://qcdn.itcharge.cn/images/20230818180019.png)
51+
![哨兵划分 6](https://qcdn.itcharge.cn/images/20230818180019.png)
5252

5353
@tab <7>
5454

55-
![哨兵划分 7](http://qcdn.itcharge.cn/images/20230818180027.png)
55+
![哨兵划分 7](https://qcdn.itcharge.cn/images/20230818180027.png)
5656

5757
:::
5858

59-
在经过一次「哨兵划分」过程之后,数组就被划分为左子数组、基准数、右子树组三个独立部分。接下来只要对划分好的左右子数组分别进行递归排序即可完成排序。整个步骤如下
59+
在经过一次「哨兵划分」过程之后,数组就被划分为左子数组、基准数、右子树组三个独立部分。接下来只要对划分好的左右子数组分别进行递归排序即可完成排序。快速排序算法的整个步骤如下
6060

61-
![快速排序](http://qcdn.itcharge.cn/images/20230818153642.png)
61+
![快速排序算法步骤](https://qcdn.itcharge.cn/images/20230818153642.png)
6262

6363
## 3. 快速排序代码实现
6464

Contents/01.Array/02.Array-Sort/07.Array-Heap-Sort.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313

1414
### 1.2 堆的存储结构
1515

16-
堆的逻辑结构就是一颗完全二叉树。而我们在「07.树 - 01.二叉树 - 01.树与二叉树的基础知识」章节中学过,对于完全二叉树(尤其是满二叉树)来说,采用顺序存储结构(数组)的形式来表示完全二叉树,能够充分利用存储空间。
16+
堆的逻辑结构就是一颗完全二叉树。如下图所示:
17+
18+
![堆的逻辑结构](https://qcdn.itcharge.cn/images/202405092006120.png)
19+
20+
而我们在「07.树 - 01.二叉树 - 01.树与二叉树的基础知识」章节中学过,对于完全二叉树(尤其是满二叉树)来说,采用顺序存储结构(数组)的形式来表示完全二叉树,能够充分利用存储空间。如下图所示:
21+
22+
![使用顺序存储结构(数组)表示堆](https://qcdn.itcharge.cn/images/202405092007823.png)
1723

1824
当我们使用顺序存储结构(即数组)来表示堆时,堆中元素的节点编号与数组的索引关系为:
1925

@@ -26,8 +32,6 @@ class MaxHeap:
2632
self.max_heap = []
2733
```
2834

29-
![堆的存储结构](https://qcdn.itcharge.cn/images/20230824154601.png)
30-
3135
### 1.3 访问堆顶元素
3236

3337
> **访问堆顶元素**:指的是从堆结构中获取位于堆顶的元素。

Contents/01.Array/02.Array-Sort/08.Array-Counting-Sort.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
1. 将其填充到结果数组 $res$ 的索引 $counts[num - nums\underline{\hspace{0.5em}}min]$ 处。
1818
2. 放入后,令累积计数数组中对应索引减 $1$,从而得到下个元素 $num$ 的放置位置。
1919

20-
我们以 $[3, 0, 4, 2, 5, 1, 3, 1, 4, 5]$ 为例,演示一下计数排序的整个步骤
20+
我们以 $[3, 0, 4, 2, 5, 1, 3, 1, 4, 5]$ 为例,演示一下计数排序算法的整个步骤
2121

22-
![计数排序](https://qcdn.itcharge.cn/images/20230822135634.png)
22+
![计数排序算法步骤](https://qcdn.itcharge.cn/images/20230822135634.png)
2323

2424
## 3. 计数排序代码实现
2525

Contents/01.Array/02.Array-Sort/09.Array-Bucket-Sort.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
3. **对每个桶进行排序**:对每个非空桶内的元素单独排序(使用插入排序、归并排序、快排排序等算法)。
1212
4. **合并桶内元素**:将排好序的各个桶中的元素按照区间顺序依次合并起来,形成一个完整的有序数组。
1313

14-
我们以 $[39, 49, 8, 13, 22, 15, 10, 30, 5, 44]$ 为例,演示一下桶排序的整个步骤
14+
我们以 $[39, 49, 8, 13, 22, 15, 10, 30, 5, 44]$ 为例,演示一下桶排序算法的整个步骤
1515

16-
![桶排序](http://qcdn.itcharge.cn/images/20230822153701.png)
16+
![桶排序算法步骤](https://qcdn.itcharge.cn/images/20230822153701.png)
1717

1818
## 3. 桶排序代码实现
1919

Contents/01.Array/02.Array-Sort/10.Array-Radix-Sort.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
3. 清空原始数组,然后按照桶的顺序依次取出对应元素,重新加入到原始数组中。
1818

1919

20-
我们以 $[692, 924, 969, 503, 871, 704, 542, 436]$ 为例,演示一下基数排序的整个步骤
20+
我们以 $[692, 924, 969, 503, 871, 704, 542, 436]$ 为例,演示一下基数排序算法的整个步骤
2121

22-
![基数排序](http://qcdn.itcharge.cn/images/20230822171758.png)
22+
![基数排序算法步骤](https://qcdn.itcharge.cn/images/20230822171758.png)
2323

2424
## 3. 基数排序代码实现
2525

Contents/01.Array/03.Array-Binary-Search/01.Array-Binary-Search-01.md

-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@
101101
输出: 4
102102
解释: 9 出现在 nums 中并且下标为 4
103103

104-
105104
输入: nums = [-1,0,3,5,9,12], target = 2
106105
输出: -1
107106
解释: 2 不存在 nums 中因此返回 -1

Contents/01.Array/04.Array-Two-Pointers/01.Array-Two-Pointers.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
> **对撞指针**:指的是两个指针 $left$、$right$ 分别指向序列第一个元素和最后一个元素,然后 $left$ 指针不断递增,$right$ 不断递减,直到两个指针的值相撞(即 $left == right$),或者满足其他要求的特殊条件为止。
1010
11-
![对撞指针](https://qcdn.itcharge.cn/images/20230906165407.png)
11+
![对撞指针](https://qcdn.itcharge.cn/images/202405092155032.png)
1212

1313
### 2.1 对撞指针求解步骤
1414

@@ -272,7 +272,7 @@ class Solution:
272272

273273
> **快慢指针**:指的是两个指针从同一侧开始遍历序列,且移动的步长一个快一个慢。移动快的指针被称为 「快指针(fast)」,移动慢的指针被称为「慢指针(slow)」。两个指针以不同速度、不同策略移动,直到快指针移动到数组尾端,或者两指针相交,或者满足其他特殊条件时为止。
274274
275-
![快慢指针](https://qcdn.itcharge.cn/images/20230906173808.png)
275+
![快慢指针](https://qcdn.itcharge.cn/images/202405092156465.png)
276276

277277
### 3.1 快慢指针求解步骤
278278

@@ -376,7 +376,7 @@ class Solution:
376376

377377
> **分离双指针**:两个指针分别属于不同的数组,两个指针分别在两个数组中移动。
378378
379-
![分离双指针](https://qcdn.itcharge.cn/images/20230906180852.png)
379+
![分离双指针](https://qcdn.itcharge.cn/images/202405092157828.png)
380380

381381
### 4.1 分离双指针求解步骤
382382

Contents/01.Array/05.Array-Sliding-Window/01.Array-Sliding-Window.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
滑动窗口利用了双指针中的快慢指针技巧,我们可以将滑动窗口看做是快慢指针两个指针中间的区间,也可以将滑动窗口看做是快慢指针的一种特殊形式。
1111

12-
![滑动窗口](https://qcdn.itcharge.cn/images/20230907105115.png)
12+
![滑动窗口](https://qcdn.itcharge.cn/images/202405092203225.png)
1313

1414
## 2. 滑动窗口适用范围
1515

@@ -29,7 +29,7 @@
2929

3030
> **固定长度滑动窗口算法(Fixed Length Sliding Window)**:在给定数组 / 字符串上维护一个固定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。
3131
32-
![固定长度滑动窗口](https://qcdn.itcharge.cn/images/20230907110356.png)
32+
![固定长度滑动窗口](https://qcdn.itcharge.cn/images/202405092204712.png)
3333

3434
### 3.1 固定长度滑动窗口算法步骤
3535

@@ -149,7 +149,7 @@ class Solution:
149149

150150
> **不定长度滑动窗口算法(Sliding Window)**:在给定数组 / 字符串上维护一个不定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。
151151
152-
![不定长度滑动窗口](https://qcdn.itcharge.cn/images/20230907132630.png)
152+
![不定长度滑动窗口](https://qcdn.itcharge.cn/images/202405092206553.png)
153153

154154
### 4.1 不定长度滑动窗口算法步骤
155155

0 commit comments

Comments
 (0)