mirror of
https://github.com/krahets/hello-algo.git
synced 2025-12-16 03:59:18 +08:00
Number the H1 and H2 headings.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 二分查找
|
||||
# 10.2. 二分查找
|
||||
|
||||
「二分查找 Binary Search」利用数据的有序性,通过每轮缩小一半搜索区间来查找目标元素。
|
||||
|
||||
@@ -11,7 +11,7 @@ comments: true
|
||||
- **要求输入数据是有序的**,这样才能通过判断大小关系来排除一半的搜索区间;
|
||||
- **二分查找仅适用于数组**,而在链表中使用效率很低,因为其在循环中需要跳跃式(非连续地)访问元素。
|
||||
|
||||
## 算法实现
|
||||
## 10.2.1. 算法实现
|
||||
|
||||
给定一个长度为 $n$ 的排序数组 `nums` ,元素从小到大排列。数组的索引取值范围为
|
||||
|
||||
@@ -517,13 +517,13 @@ $$
|
||||
let m = i + (j - 1) / 2
|
||||
```
|
||||
|
||||
## 复杂度分析
|
||||
## 10.2.2. 复杂度分析
|
||||
|
||||
**时间复杂度 $O(\log n)$** :其中 $n$ 为数组或链表长度;每轮排除一半的区间,因此循环轮数为 $\log_2 n$ ,使用 $O(\log n)$ 时间。
|
||||
|
||||
**空间复杂度 $O(1)$** :指针 `i` , `j` 使用常数大小空间。
|
||||
|
||||
## 优点与缺点
|
||||
## 10.2.3. 优点与缺点
|
||||
|
||||
二分查找效率很高,体现在:
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 哈希查找
|
||||
# 10.3. 哈希查找
|
||||
|
||||
!!! question
|
||||
|
||||
@@ -10,7 +10,7 @@ comments: true
|
||||
|
||||
「哈希查找 Hash Searching」借助一个哈希表来存储需要的「键值对 Key Value Pair」,我们可以在 $O(1)$ 时间下实现“键 $\rightarrow$ 值”映射查找,体现着“以空间换时间”的算法思想。
|
||||
|
||||
## 算法实现
|
||||
## 10.3.1. 算法实现
|
||||
|
||||
如果我们想要给定数组中的一个目标元素 `target` ,获取该元素的索引,那么可以借助一个哈希表实现查找。
|
||||
|
||||
@@ -221,13 +221,13 @@ comments: true
|
||||
}
|
||||
```
|
||||
|
||||
## 复杂度分析
|
||||
## 10.3.2. 复杂度分析
|
||||
|
||||
**时间复杂度 $O(1)$** :哈希表的查找操作使用 $O(1)$ 时间。
|
||||
|
||||
**空间复杂度 $O(n)$** :其中 $n$ 为数组或链表长度。
|
||||
|
||||
## 优点与缺点
|
||||
## 10.3.3. 优点与缺点
|
||||
|
||||
在哈希表中,**查找、插入、删除操作的平均时间复杂度都为 $O(1)$** ,这意味着无论是高频增删还是高频查找场景,哈希查找的性能表现都非常好。当然,一切的前提是保证哈希表未退化。
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 线性查找
|
||||
# 10.1. 线性查找
|
||||
|
||||
「线性查找 Linear Search」是一种最基础的查找方法,其从数据结构的一端开始,依次访问每个元素,直到另一端后停止。
|
||||
|
||||
## 算法实现
|
||||
## 10.1.1. 算法实现
|
||||
|
||||
线性查找实质上就是遍历数据结构 + 判断条件。比如,我们想要在数组 `nums` 中查找目标元素 `target` 的对应索引,那么可以在数组中进行线性查找。
|
||||
|
||||
@@ -297,13 +297,13 @@ comments: true
|
||||
}
|
||||
```
|
||||
|
||||
## 复杂度分析
|
||||
## 10.1.2. 复杂度分析
|
||||
|
||||
**时间复杂度 $O(n)$** :其中 $n$ 为数组或链表长度。
|
||||
|
||||
**空间复杂度 $O(1)$** :无需使用额外空间。
|
||||
|
||||
## 优点与缺点
|
||||
## 10.1.3. 优点与缺点
|
||||
|
||||
**线性查找的通用性极佳**。由于线性查找是依次访问元素的,即没有跳跃访问元素,因此数组或链表皆适用。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 小结
|
||||
# 10.4. 小结
|
||||
|
||||
- 线性查找是一种最基础的查找方法,通过遍历数据结构 + 判断条件实现查找。
|
||||
- 二分查找利用数据的有序性,通过循环不断缩小一半搜索区间来实现查找,其要求输入数据是有序的,并且仅适用于数组或基于数组实现的数据结构。
|
||||
|
||||
Reference in New Issue
Block a user