Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit caf432c

Browse files
update content
1 parent 994c02c commit caf432c

File tree

10 files changed

+24
-37
lines changed

10 files changed

+24
-37
lines changed

‎README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@ PDF 共两本,一本《labuladong 的算法秘籍》类似教材,帮你系
157157
* [线性探查法的两种代码实现](https://labuladong.online/algo/fname.html?fname=哈希表线性探查实现)
158158
* [手把手带你实现哈希集合](https://labuladong.online/algo/)
159159
* [哈希集合的原理及代码实现](https://labuladong.online/algo/fname.html?fname=哈希集合实现)
160+
* [手写标准库中的二叉树结构](https://labuladong.online/algo/)
161+
* [二叉树基础及常见类型](https://labuladong.online/algo/fname.html?fname=二叉树基础)
162+
* [正在更新 ing](https://labuladong.online/algo/fname.html?fname=更新中)
163+
* [手把手带你实现二叉堆](https://labuladong.online/algo/)
164+
* [二叉堆的基本原理](https://labuladong.online/algo/fname.html?fname=二叉堆基础)
165+
* [二叉堆的代码实现](https://labuladong.online/algo/fname.html?fname=二叉堆实现)
160166
* [正在更新 ing](https://labuladong.online/algo/fname.html?fname=更新中)
161167

162168

@@ -172,8 +178,8 @@ PDF 共两本,一本《labuladong 的算法秘籍》类似教材,帮你系
172178
* [回溯算法秒杀所有排列/组合/子集问题](https://labuladong.online/algo/fname.html?fname=子集排列组合)
173179
* [球盒模型:回溯算法穷举的两种视角](https://labuladong.online/algo/fname.html?fname=回溯两种视角)
174180
* [BFS 算法解题套路框架](https://labuladong.online/algo/fname.html?fname=BFS框架)
175-
* [我写了首诗,把二分搜索算法变成了默写题](https://labuladong.online/algo/fname.html?fname=二分查找详解)
176181
* [我写了首诗,把滑动窗口算法变成了默写题](https://labuladong.online/algo/fname.html?fname=滑动窗口技巧进阶)
182+
* [我写了首诗,把二分搜索算法变成了默写题](https://labuladong.online/algo/fname.html?fname=二分查找详解)
177183
* [算法时空复杂度分析实用指南](https://labuladong.online/algo/fname.html?fname=时间复杂度)
178184

179185

@@ -250,7 +256,7 @@ PDF 共两本,一本《labuladong 的算法秘籍》类似教材,帮你系
250256
* [【强化练习】哈希表更多习题](https://labuladong.online/algo/fname.html?fname=哈希表习题)
251257
* [前缀树算法模板秒杀五道算法题](https://labuladong.online/algo/fname.html?fname=trie)
252258
* [一道求中位数的算法题把我整不会了](https://labuladong.online/algo/fname.html?fname=数据流中位数)
253-
* [二叉堆详解实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆详解实现优先级队列)
259+
* [二叉堆详解实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆实现)
254260
* [【强化练习】优先级队列经典习题](https://labuladong.online/algo/fname.html?fname=二叉堆习题)
255261
* [设计朋友圈时间线功能](https://labuladong.online/algo/fname.html?fname=设计Twitter)
256262
* [【强化练习】更多经典设计习题](https://labuladong.online/algo/fname.html?fname=设计习题)

‎动态规划系列/动态规划详解进阶.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,11 @@ int dp(int[] coins, int amount) {
346346

347347
:::
348348

349-
> 另外,我经常看到有人问,子问题的结果为什么要加 1(`subProblem + 1`),而不是加硬币金额之类的。我这里统一提示一下,动态规划问题的关键是 `dp` 函数/数组的定义,你这个函数的返回值代表什么?你回过头去搞清楚这一点,然后就知道为什么要给子问题的返回值加 1 了。
349+
::: tip
350+
351+
另外,我经常看到有人问,子问题的结果为什么要加 1(`subProblem + 1`),而不是加硬币金额之类的。我这里统一提示一下,动态规划问题的关键是 `dp` 函数/数组的定义,你这个函数的返回值代表什么?你回过头去搞清楚这一点,然后就知道为什么要给子问题的返回值加 1 了。
352+
353+
:::
350354

351355
<visual slug='mydata-coin-change'/>
352356

@@ -484,6 +488,7 @@ int coinChange(int[] coins, int amount) {
484488
- [一个方法团灭 LeetCode 打家劫舍问题](https://labuladong.online/algo/fname.html?fname=抢房子)
485489
- [一个方法团灭 LeetCode 股票买卖问题](https://labuladong.online/algo/fname.html?fname=团灭股票问题)
486490
- [东哥带你刷二叉树(纲领篇)](https://labuladong.online/algo/fname.html?fname=二叉树总结)
491+
- [二叉树基础及常见类型](https://labuladong.online/algo/fname.html?fname=二叉树基础)
487492
- [分治算法详解:运算优先级](https://labuladong.online/algo/fname.html?fname=分治算法)
488493
- [动态规划和回溯算法的思维转换](https://labuladong.online/algo/fname.html?fname=单词拼接)
489494
- [动态规划帮我通关了《辐射4》](https://labuladong.online/algo/fname.html?fname=转盘)

‎数据结构系列/dijkstra算法.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
但如果你看过历史文章,应该可以对算法形成自己的理解,就会发现很多算法都是换汤不换药,毫无新意,非常枯燥。
2929

30-
比如,[东哥手把手带你刷二叉树(总纲)](https://labuladong.online/algo/fname.html?fname=二叉树总结) 中说二叉树非常重要,你把这个结构掌握了,就会发现 [动态规划](https://labuladong.online/algo/fname.html?fname=动态规划详解进阶),[分治算法](https://labuladong.online/algo/fname.html?fname=分治算法),[回溯(DFS)算法](https://labuladong.online/algo/fname.html?fname=回溯算法详解修订版),[BFS 算法框架](https://labuladong.online/algo/fname.html?fname=BFS框架),[Union-Find 并查集算法](https://labuladong.online/algo/fname.html?fname=UnionFind算法详解),[二叉堆实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆详解实现优先级队列) 就是把二叉树翻来覆去的运用。
30+
比如,[东哥手把手带你刷二叉树(总纲)](https://labuladong.online/algo/fname.html?fname=二叉树总结) 中说二叉树非常重要,你把这个结构掌握了,就会发现 [动态规划](https://labuladong.online/algo/fname.html?fname=动态规划详解进阶),[分治算法](https://labuladong.online/algo/fname.html?fname=分治算法),[回溯(DFS)算法](https://labuladong.online/algo/fname.html?fname=回溯算法详解修订版),[BFS 算法框架](https://labuladong.online/algo/fname.html?fname=BFS框架),[Union-Find 并查集算法](https://labuladong.online/algo/fname.html?fname=UnionFind算法详解),[二叉堆实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆实现) 就是把二叉树翻来覆去的运用。
3131

3232
那么本文又要告诉你,Dijkstra 算法(一般音译成迪杰斯特拉算法)无非就是一个 BFS 算法的加强版,它们都是从二叉树的层序遍历衍生出来的。
3333

‎数据结构系列/二叉堆详解实现优先级队列.md

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,15 @@
11
# 二叉堆详解实现优先级队列
22

3-
<p align='center'>
4-
<a href="https://github.com/labuladong/fucking-algorithm" target="view_window"><img alt="GitHub" src="https://img.shields.io/github/stars/labuladong/fucking-algorithm?label=Stars&style=flat-square&logo=GitHub"></a>
5-
<a href="https://labuladong.online/algo/" target="_blank"><img class="my_header_icon" src="https://img.shields.io/static/v1?label=精品课程&message=查看&color=pink&style=flat"></a>
6-
<a href="https://www.zhihu.com/people/labuladong"><img src="https://img.shields.io/badge/%E7%9F%A5%E4%B9%8E-@labuladong-000000.svg?style=flat-square&logo=Zhihu"></a>
7-
<a href="https://space.bilibili.com/14089380"><img src="https://img.shields.io/badge/B站-@labuladong-000000.svg?style=flat-square&logo=Bilibili"></a>
8-
</p>
9-
10-
![](https://labuladong.online/algo/images/souyisou1.png)
11-
12-
**通知:[新版网站会员](https://labuladong.online/algo/intro/site-vip/) 限时优惠;算法可视化编辑器上线,[点击体验](https://labuladong.online/algo/intro/visualize/)!另外,建议你在我的 [网站](https://labuladong.online/algo/) 学习文章,体验更好。**
13-
14-
15-
16-
**-----------**
17-
18-
二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。
19-
20-
其主要操作就两个,`sink`(下沉)和 `swim`(上浮),用以维护二叉堆的性质。其主要应用有两个,首先是一种排序方法「堆排序」,第二是一种很有用的数据结构「优先级队列」。
21-
22-
那么本文以实现优先级队列(Priority Queue)为例,来讲讲一下二叉堆怎么运作的。
23-
24-
### 一、二叉堆概览
25-
26-
首先,二叉堆和二叉树有啥关系呢,为什么人们总是把二叉堆画成一棵二叉树?
3+
本文已重写,请阅读 [二叉堆基础原理](https://labuladong.online/algo/fname.html?fname=二叉堆基础)[二叉堆实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆实现)
274

285

296

307
<hr>
318
<details class="hint-container details">
329
<summary><strong>引用本文的文章</strong></summary>
3310

34-
- [Dijkstra 算法模板及应用](https://labuladong.online/algo/fname.html?fname=dijkstra算法)
3511
- [【强化练习】优先级队列经典习题](https://labuladong.online/algo/fname.html?fname=二叉堆习题)
3612
- [【强化练习】运用层序遍历解题 I](https://labuladong.online/algo/fname.html?fname=习题层序1)
37-
- [双指针技巧秒杀七道链表题目](https://labuladong.online/algo/fname.html?fname=链表技巧)
38-
- [如何调度考生的座位](https://labuladong.online/algo/fname.html?fname=座位调度)
39-
- [快速排序详解及应用](https://labuladong.online/algo/fname.html?fname=快速排序)
40-
- [设计朋友圈时间线功能](https://labuladong.online/algo/fname.html?fname=设计Twitter)
4113

4214
</details><hr>
4315

@@ -72,9 +44,9 @@
7244

7345
**_____________**
7446

75-
本文为会员内容,请扫码关注公众号或 [点这里](https://labuladong.online/algo/ds-class/dong-shou--b9ca2/er-cha-dui-1a386) 查看:
47+
**《labuladong 的算法笔记》已经出版,关注公众号查看详情;后台回复「**全家桶**」可下载配套 PDF 和刷题全家桶**:
7648

77-
![](https://labuladong.online/algo/images/qrcode.jpg)
49+
![](https://labuladong.online/algo/images/souyisou2.png)
7850

7951
======其他语言代码======
8052

‎数据结构系列/图.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ class Solution {
347347
- [一文秒杀所有岛屿题目](https://labuladong.online/algo/fname.html?fname=岛屿题目)
348348
- [东哥带你刷二叉树(纲领篇)](https://labuladong.online/algo/fname.html?fname=二叉树总结)
349349
- [二分图判定算法](https://labuladong.online/algo/fname.html?fname=二分图)
350+
- [二叉树基础及常见类型](https://labuladong.online/algo/fname.html?fname=二叉树基础)
350351
- [众里寻他千百度:名流问题](https://labuladong.online/algo/fname.html?fname=名人问题)
351352
- [前缀树算法模板秒杀五道算法题](https://labuladong.online/algo/fname.html?fname=trie)
352353
- [动态数组代码实现](https://labuladong.online/algo/fname.html?fname=数组实现)

‎数据结构系列/设计Twitter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ class Twitter {
229229

230230
### 三、算法设计
231231

232-
实现合并 k 个有序链表的算法需要用到优先级队列(Priority Queue),这种数据结构是二叉堆最重要的应用。你可以理解为它可以对插入的元素自动排序,乱序的元素插入其中就被放到了正确的位置,可以按照从小到大(或从大到小)有序地取出元素。具体可以看这篇 [二叉树实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆详解实现优先级队列)
232+
实现合并 k 个有序链表的算法需要用到优先级队列(Priority Queue),这种数据结构是二叉堆最重要的应用。你可以理解为它可以对插入的元素自动排序,乱序的元素插入其中就被放到了正确的位置,可以按照从小到大(或从大到小)有序地取出元素。具体可以看这篇 [二叉树实现优先级队列](https://labuladong.online/algo/fname.html?fname=二叉堆实现)
233233

234234
```python
235235
PriorityQueue pq

‎算法思维系列/UnionFind算法详解.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class UF {
9191
- [【强化练习】运用层序遍历解题 II](https://labuladong.online/algo/fname.html?fname=习题层序2)
9292
- [一文秒杀所有岛屿题目](https://labuladong.online/algo/fname.html?fname=岛屿题目)
9393
- [二分图判定算法](https://labuladong.online/algo/fname.html?fname=二分图)
94+
- [二叉树基础及常见类型](https://labuladong.online/algo/fname.html?fname=二叉树基础)
9495
- [我的刷题心得:算法的本质](https://labuladong.online/algo/fname.html?fname=算法心得)
9596
- [用算法打败算法](https://labuladong.online/algo/fname.html?fname=PDF中的算法)
9697

‎算法思维系列/回溯算法详解修订版.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ def backtrack(...):
423423
- [【强化练习】同时运用两种思维解题](https://labuladong.online/algo/fname.html?fname=习题综合两种)
424424
- [一文秒杀所有岛屿题目](https://labuladong.online/algo/fname.html?fname=岛屿题目)
425425
- [东哥带你刷二叉树(纲领篇)](https://labuladong.online/algo/fname.html?fname=二叉树总结)
426+
- [二叉树基础及常见类型](https://labuladong.online/algo/fname.html?fname=二叉树基础)
426427
- [分治算法详解:运算优先级](https://labuladong.online/algo/fname.html?fname=分治算法)
427428
- [前缀树算法模板秒杀五道算法题](https://labuladong.online/algo/fname.html?fname=trie)
428429
- [动态规划和回溯算法的思维转换](https://labuladong.online/algo/fname.html?fname=单词拼接)

‎算法思维系列/学习数据结构和算法的高效方法.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ N 叉树的遍历框架,找出来了吧?你说,树这种结构重不重要
368368
- [东哥带你刷二叉树(序列化篇)](https://labuladong.online/algo/fname.html?fname=二叉树的序列化)
369369
- [东哥带你刷二叉树(纲领篇)](https://labuladong.online/algo/fname.html?fname=二叉树总结)
370370
- [二分图判定算法](https://labuladong.online/algo/fname.html?fname=二分图)
371+
- [二叉堆的基本原理](https://labuladong.online/algo/fname.html?fname=二叉堆基础)
371372
- [前缀树算法模板秒杀五道算法题](https://labuladong.online/algo/fname.html?fname=trie)
372373
- [回溯算法秒杀所有排列/组合/子集问题](https://labuladong.online/algo/fname.html?fname=子集排列组合)
373374
- [回溯算法解题套路框架](https://labuladong.online/algo/fname.html?fname=回溯算法详解修订版)

‎高频面试系列/座位调度.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ class ExamRoom {
235235

236236
处理动态问题一般都会用到有序数据结构,比如平衡二叉搜索树和二叉堆,二者的时间复杂度差不多,但前者支持的操作更多。
237237

238-
既然平衡二叉搜索树这么好用,还用二叉堆干嘛呢?因为二叉堆底层就是数组,实现简单啊,详见前文 [二叉堆详解](https://labuladong.online/algo/fname.html?fname=二叉堆详解实现优先级队列)。你实现个红黑树试试?操作复杂,而且消耗的空间相对来说会多一些。具体问题,还是要选择恰当的数据结构来解决。
238+
既然平衡二叉搜索树这么好用,还用二叉堆干嘛呢?因为二叉堆底层就是数组,实现简单啊,详见前文 [二叉堆详解](https://labuladong.online/algo/fname.html?fname=二叉堆实现)。你实现个红黑树试试?操作复杂,而且消耗的空间相对来说会多一些。具体问题,还是要选择恰当的数据结构来解决。
239239

240240
希望本文对大家有帮助。
241241

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /