Skip to content

Commit

Permalink
Update 01.Priority-Queue.md
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed Nov 8, 2022
1 parent 8fff9b9 commit a94b3e4
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions Contents/04.Queue/02.Priority-Queue/01.Priority-Queue.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@

- **数组(顺序存储)实现优先队列**:入队操作直接插入到数组队尾,时间复杂度为 $O(1)$。出队操作需要遍历整个数组,找到优先级最高的元素,返回并删除该元素,时间复杂度为 $O(n)$。
- **链表(链式存储)实现优先队列**:链表中的元素按照优先级排序,入队操作需要为待插入元素创建节点,并在链表中找到合适的插入位置,时间复杂度为 $O(n)$。出队操作直接返回链表队头元素,并删除队头元素,时间复杂度为 $O(1)$。
- **二叉堆结构实现优先队列**:构建一个二叉堆结构,二叉堆按照优先级进行排序。入队操作就是将元素插入到二叉堆中合适位置,时间复杂度为 $O(log_2n)$。吹对操作则返回二叉堆中优先级最大节点并删除,时间复杂度也是 $O(log_2n)$。
- **二叉堆结构实现优先队列**:构建一个二叉堆结构,二叉堆按照优先级进行排序。入队操作就是将元素插入到二叉堆中合适位置,时间复杂度为 $O(\log_2n)$。吹对操作则返回二叉堆中优先级最大节点并删除,时间复杂度也是 $O(\log_2n)$。

下面是三种结构实现的优先队列入队操作和出队操作的时间复杂度总结。

| | 入队操作时间复杂度 | 出队操作(取出优先级最高的元素)时间复杂度 |
| ---- | ------------------ | ------------------------------------------ |
|| $O(log_2n)$ | $O(log_2n)$ |
| 数组 | $O(n)$ | $O(1)$ |
| 链表 | $O(1)$ | $O(n)$ |
|| $O(\log_2n)$ | $O(\log_2n)$ |
| 数组 | $O(1)$ | $O(n)$ |
| 链表 | $O(n)$ | $O(1)$ |

从上面的表格可以看出,使用「二叉堆」这种数据结构来实现优先队列是比较高效的。下面我们来讲解一下二叉堆实现的优先队列。

Expand Down Expand Up @@ -299,9 +299,9 @@ class Solution:
1. 使用哈希表记录下数组中各个元素的频数。
2. 然后将哈希表中的元素去重,转换为新数组。时间复杂度 $O(n)$,空间复杂度 $O(n)$。
3. 使用二叉堆构建优先队列,优先级为元素频数。此时堆顶元素即为频数最高的元素。时间复杂度 $O(n)$,空间复杂度 $O(n)$。
4. 将堆顶元素加入到答案数组中,进行出队操作。时间复杂度 $O(log{n})$。
4. 将堆顶元素加入到答案数组中,进行出队操作。时间复杂度 $O(\log_2 n)$。
- 出队操作:交换堆顶元素与末尾元素,将末尾元素已移出堆。继续调整大顶堆。
5. 不断重复第 4 步,直到 `k` 次结束。调整 `k` 次的时间复杂度 $O(nlog{n})$。
5. 不断重复第 4 步,直到 `k` 次结束。调整 `k` 次的时间复杂度 $O(n\log_2 n)$。

##### 思路 1:代码

Expand Down

0 comments on commit a94b3e4

Please sign in to comment.