mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-15 04:38:30 +08:00
deploy
This commit is contained in:
@ -4501,7 +4501,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<h3 id="4">4. 堆顶元素出堆<a class="headerlink" href="#4" title="Permanent link">¶</a></h3>
|
||||
<p>堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的索引都会发生变化,这将使得后续使用堆化修复变得困难。为了尽量减少元素索引的变动,我们采取以下操作步骤。</p>
|
||||
<p>堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的索引都会发生变化,这将使得后续使用堆化修复变得困难。为了尽量减少元素索引的变动,我们采用以下操作步骤。</p>
|
||||
<ol>
|
||||
<li>交换堆顶元素与堆底元素(即交换根节点与最右叶节点)。</li>
|
||||
<li>交换完成后,将堆底从列表中删除(注意,由于已经交换,实际上删除的是原来的堆顶元素)。</li>
|
||||
|
@ -1658,8 +1658,15 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#841-q-a" class="md-nav__link">
|
||||
8.4.1 Q & A
|
||||
<a href="#1" class="md-nav__link">
|
||||
1. 重点回顾
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2-q-a" class="md-nav__link">
|
||||
2. Q & A
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -3398,8 +3405,15 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#841-q-a" class="md-nav__link">
|
||||
8.4.1 Q & A
|
||||
<a href="#1" class="md-nav__link">
|
||||
1. 重点回顾
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#2-q-a" class="md-nav__link">
|
||||
2. Q & A
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -3428,6 +3442,7 @@
|
||||
|
||||
|
||||
<h1 id="84">8.4 小结<a class="headerlink" href="#84" title="Permanent link">¶</a></h1>
|
||||
<h3 id="1">1. 重点回顾<a class="headerlink" href="#1" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
<li>堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。</li>
|
||||
<li>优先队列的定义是具有出队优先级的队列,通常使用堆来实现。</li>
|
||||
@ -3437,7 +3452,7 @@
|
||||
<li>输入 <span class="arithmatex">\(n\)</span> 个元素并建堆的时间复杂度可以优化至 <span class="arithmatex">\(O(n)\)</span> ,非常高效。</li>
|
||||
<li>Top-K 是一个经典算法问题,可以使用堆数据结构高效解决,时间复杂度为 <span class="arithmatex">\(O(n \log k)\)</span> 。</li>
|
||||
</ul>
|
||||
<h2 id="841-q-a">8.4.1 Q & A<a class="headerlink" href="#841-q-a" title="Permanent link">¶</a></h2>
|
||||
<h3 id="2-q-a">2. Q & A<a class="headerlink" href="#2-q-a" title="Permanent link">¶</a></h3>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">数据结构的“堆”与内存管理的“堆”是同一个概念吗?</p>
|
||||
<p>两者不是同一个概念,只是碰巧都叫堆。计算机系统内存中的堆是动态内存分配的一部分,程序在运行时可以使用它来存储数据。程序可以请求一定量的堆内存,用于存储如对象和数组等复杂结构。当这些数据不再需要时,程序需要释放这些内存,以防止内存泄露。相较于栈内存,堆内存的管理和使用需要更谨慎,不恰当的使用可能会导致内存泄露和野指针等问题。</p>
|
||||
|
@ -3469,7 +3469,7 @@
|
||||
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>当 <span class="arithmatex">\(k = n\)</span> 时,我们可以得到从大到小的序列,等价于“选择排序”算法。</p>
|
||||
<p>当 <span class="arithmatex">\(k = n\)</span> 时,我们可以得到完整的有序序列,此时等价于“选择排序”算法。</p>
|
||||
</div>
|
||||
<h2 id="832">8.3.2 方法二:排序<a class="headerlink" href="#832" title="Permanent link">¶</a></h2>
|
||||
<p>如图 8-7 所示,我们可以先对数组 <code>nums</code> 进行排序,再返回最右边的 <span class="arithmatex">\(k\)</span> 个元素,时间复杂度为 <span class="arithmatex">\(O(n \log n)\)</span> 。</p>
|
||||
|
Reference in New Issue
Block a user