This commit is contained in:
krahets
2023-06-25 21:11:44 +08:00
parent 0b6f239630
commit 5a61bb028f
22 changed files with 1067 additions and 207 deletions
+1 -1
View File
@@ -2190,7 +2190,7 @@
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><span class="filename">my_heap.go</span><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="cm">/* 构造方法,根据切片建堆 */</span>
<div class="highlight"><span class="filename">my_heap.go</span><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="cm">/* 构造函数,根据切片建堆 */</span>
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="kd">func</span><span class="w"> </span><span class="nx">newMaxHeap</span><span class="p">(</span><span class="nx">nums</span><span class="w"> </span><span class="p">[]</span><span class="kt">any</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="nx">maxHeap</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="c1">// 将列表元素原封不动添加进堆</span>
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="nx">h</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="o">&amp;</span><span class="nx">maxHeap</span><span class="p">{</span><span class="nx">data</span><span class="p">:</span><span class="w"> </span><span class="nx">nums</span><span class="p">}</span>
+52
View File
@@ -1294,10 +1294,41 @@
<label class="md-nav__link md-nav__link--active" for="__toc">
8.4. &nbsp; 小结
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
8.4. &nbsp; 小结
</a>
<nav class="md-nav md-nav--secondary" aria-label="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<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. &nbsp; Q &amp; A
</a>
</li>
</ul>
</nav>
</li>
@@ -2051,6 +2082,21 @@
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<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. &nbsp; Q &amp; A
</a>
</li>
</ul>
</nav>
</div>
</div>
@@ -2080,7 +2126,13 @@
<li>完全二叉树非常适合用数组表示,因此我们通常使用数组来存储堆。</li>
<li>堆化操作用于维护堆的性质,在入堆和出堆操作中都会用到。</li>
<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. &nbsp; Q &amp; A<a class="headerlink" href="#841-q-a" title="Permanent link">&para;</a></h2>
<div class="admonition question">
<p class="admonition-title">数据结构的“堆”与内存管理的“堆”是同一个概念吗?</p>
<p>两者不是同一个概念,只是碰巧都叫堆。计算机系统内存中的堆是动态内存分配的一部分,程序在运行时可以使用它来存储数据。程序可以请求一定量的堆内存,用于存储如对象和数组等复杂结构。当这些数据不再需要时,程序需要释放这些内存,以防止内存泄露。相较于栈内存,堆内存的管理和使用需要更谨慎,不恰当的使用可能会导致内存泄露和野指针等问题。</p>
</div>