This commit is contained in:
krahets
2023-12-28 17:18:44 +08:00
parent 5e0d7327db
commit b8a5bd790b
114 changed files with 860 additions and 863 deletions

View File

@@ -1857,7 +1857,7 @@
<span class="md-ellipsis">
8.3 &nbsp; Top-K 问题
8.3 &nbsp; Top-k 问题
</span>
@@ -3671,7 +3671,7 @@
<!-- Page content -->
<h1 id="41">4.1 &nbsp; 数组<a class="headerlink" href="#41" title="Permanent link">&para;</a></h1>
<p>「数组 array」是一种线性数据结构其将相同类型的元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的「索引 index」。图 4-1 展示了数组的主要术语和概念。</p>
<p>「数组 array」是一种线性数据结构其将相同类型的元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的「索引 index」。图 4-1 展示了数组的主要概念和存储方式</p>
<p><a class="glightbox" href="../array.assets/array_definition.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="数组定义与存储方式" class="animation-figure" src="../array.assets/array_definition.png" /></a></p>
<p align="center"> 图 4-1 &nbsp; 数组定义与存储方式 </p>

View File

@@ -1721,7 +1721,7 @@
<span class="md-ellipsis">
8.3 &nbsp; Top-K 问题
8.3 &nbsp; Top-k 问题
</span>

View File

@@ -1848,7 +1848,7 @@
<span class="md-ellipsis">
8.3 &nbsp; Top-K 问题
8.3 &nbsp; Top-k 问题
</span>
@@ -3662,8 +3662,8 @@
<p>观察图 4-5 ,链表的组成单位是「节点 node」对象。每个节点都包含两项数据节点的“值”和指向下一节点的“引用”。</p>
<ul>
<li>链表的首个节点被称为“头节点”,最后一个节点被称为“尾节点”。</li>
<li>尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 <span class="arithmatex">\(\text{null}\)</span><span class="arithmatex">\(\text{nullptr}\)</span><span class="arithmatex">\(\text{None}\)</span></li>
<li>在 C、C++、Go 和 Rust 等支持指针的语言中,上述“引用”应被替换为“指针”。</li>
<li>尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 <code>null</code><code>nullptr</code><code>None</code></li>
<li>在 C、C++、Go 和 Rust 等支持指针的语言中,上述“引用”应被替换为“指针”。</li>
</ul>
<p>如以下代码所示,链表节点 <code>ListNode</code> 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,<strong>链表比数组占用更多的内存空间</strong></p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:12"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Java</label><label for="__tabbed_1_4">C#</label><label for="__tabbed_1_5">Go</label><label for="__tabbed_1_6">Swift</label><label for="__tabbed_1_7">JS</label><label for="__tabbed_1_8">TS</label><label for="__tabbed_1_9">Dart</label><label for="__tabbed_1_10">Rust</label><label for="__tabbed_1_11">C</label><label for="__tabbed_1_12">Zig</label></div>
@@ -4654,7 +4654,7 @@
<h2 id="423">4.2.3 &nbsp; 常见链表类型<a class="headerlink" href="#423" title="Permanent link">&para;</a></h2>
<p>如图 4-8 所示,常见的链表类型包括三种。</p>
<ul>
<li><strong>单向链表</strong>:即前面介绍的普通链表。单向链表的节点包含值和指向下一节点的引用两项数据。我们将首个节点称为头节点,将最后一个节点称为尾节点,尾节点指向空 <span class="arithmatex">\(\text{None}\)</span></li>
<li><strong>单向链表</strong>:即前面介绍的普通链表。单向链表的节点包含值和指向下一节点的引用两项数据。我们将首个节点称为头节点,将最后一个节点称为尾节点,尾节点指向空 <code>None</code></li>
<li><strong>环形链表</strong>:如果我们令单向链表的尾节点指向头节点(首尾相接),则得到一个环形链表。在环形链表中,任意节点都可以视作头节点。</li>
<li><strong>双向链表</strong>:与单向链表相比,双向链表记录了两个方向的引用。双向链表的节点定义同时包含指向后继节点(下一个节点)和前驱节点(上一个节点)的引用(指针)。相较于单向链表,双向链表更具灵活性,可以朝两个方向遍历链表,但相应地也需要占用更多的内存空间。</li>
</ul>

View File

@@ -1839,7 +1839,7 @@
<span class="md-ellipsis">
8.3 &nbsp; Top-K 问题
8.3 &nbsp; Top-k 问题
</span>
@@ -4385,7 +4385,7 @@
<a id="__codelineno-72-18" name="__codelineno-72-18" href="#__codelineno-72-18"></a>
<a id="__codelineno-72-19" name="__codelineno-72-19" href="#__codelineno-72-19"></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
<a id="__codelineno-72-20" name="__codelineno-72-20" href="#__codelineno-72-20"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;访问元素&quot;&quot;&quot;</span>
<a id="__codelineno-72-21" name="__codelineno-72-21" href="#__codelineno-72-21"></a> <span class="c1"># 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-72-21" name="__codelineno-72-21" href="#__codelineno-72-21"></a> <span class="c1"># 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-72-22" name="__codelineno-72-22" href="#__codelineno-72-22"></a> <span class="k">if</span> <span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_size</span><span class="p">:</span>
<a id="__codelineno-72-23" name="__codelineno-72-23" href="#__codelineno-72-23"></a> <span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span><span class="s2">&quot;索引越界&quot;</span><span class="p">)</span>
<a id="__codelineno-72-24" name="__codelineno-72-24" href="#__codelineno-72-24"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arr</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
@@ -4428,12 +4428,12 @@
<a id="__codelineno-72-61" name="__codelineno-72-61" href="#__codelineno-72-61"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_arr</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arr</span><span class="p">[</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<a id="__codelineno-72-62" name="__codelineno-72-62" href="#__codelineno-72-62"></a> <span class="c1"># 更新元素数量</span>
<a id="__codelineno-72-63" name="__codelineno-72-63" href="#__codelineno-72-63"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_size</span> <span class="o">-=</span> <span class="mi">1</span>
<a id="__codelineno-72-64" name="__codelineno-72-64" href="#__codelineno-72-64"></a> <span class="c1"># 返回被删除元素</span>
<a id="__codelineno-72-64" name="__codelineno-72-64" href="#__codelineno-72-64"></a> <span class="c1"># 返回被删除元素</span>
<a id="__codelineno-72-65" name="__codelineno-72-65" href="#__codelineno-72-65"></a> <span class="k">return</span> <span class="n">num</span>
<a id="__codelineno-72-66" name="__codelineno-72-66" href="#__codelineno-72-66"></a>
<a id="__codelineno-72-67" name="__codelineno-72-67" href="#__codelineno-72-67"></a> <span class="k">def</span> <span class="nf">extend_capacity</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-72-68" name="__codelineno-72-68" href="#__codelineno-72-68"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;列表扩容&quot;&quot;&quot;</span>
<a id="__codelineno-72-69" name="__codelineno-72-69" href="#__codelineno-72-69"></a> <span class="c1"># 新建一个长度为原数组 __extend_ratio 倍的新数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-72-69" name="__codelineno-72-69" href="#__codelineno-72-69"></a> <span class="c1"># 新建一个长度为原数组 _extend_ratio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-72-70" name="__codelineno-72-70" href="#__codelineno-72-70"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_arr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_arr</span> <span class="o">+</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">capacity</span><span class="p">()</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_extend_ratio</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<a id="__codelineno-72-71" name="__codelineno-72-71" href="#__codelineno-72-71"></a> <span class="c1"># 更新列表容量</span>
<a id="__codelineno-72-72" name="__codelineno-72-72" href="#__codelineno-72-72"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_capacity</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_arr</span><span class="p">)</span>
@@ -4475,7 +4475,7 @@
<a id="__codelineno-73-29" name="__codelineno-73-29" href="#__codelineno-73-29"></a>
<a id="__codelineno-73-30" name="__codelineno-73-30" href="#__codelineno-73-30"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-73-31" name="__codelineno-73-31" href="#__codelineno-73-31"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">get</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">index</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-73-32" name="__codelineno-73-32" href="#__codelineno-73-32"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-73-32" name="__codelineno-73-32" href="#__codelineno-73-32"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-73-33" name="__codelineno-73-33" href="#__codelineno-73-33"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="n">size</span><span class="p">())</span>
<a id="__codelineno-73-34" name="__codelineno-73-34" href="#__codelineno-73-34"></a><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="n">out_of_range</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">);</span>
<a id="__codelineno-73-35" name="__codelineno-73-35" href="#__codelineno-73-35"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
@@ -4525,7 +4525,7 @@
<a id="__codelineno-73-79" name="__codelineno-73-79" href="#__codelineno-73-79"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-73-80" name="__codelineno-73-80" href="#__codelineno-73-80"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-73-81" name="__codelineno-73-81" href="#__codelineno-73-81"></a><span class="w"> </span><span class="n">arrSize</span><span class="o">--</span><span class="p">;</span>
<a id="__codelineno-73-82" name="__codelineno-73-82" href="#__codelineno-73-82"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-73-82" name="__codelineno-73-82" href="#__codelineno-73-82"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-73-83" name="__codelineno-73-83" href="#__codelineno-73-83"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-73-84" name="__codelineno-73-84" href="#__codelineno-73-84"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-73-85" name="__codelineno-73-85" href="#__codelineno-73-85"></a>
@@ -4581,7 +4581,7 @@
<a id="__codelineno-74-22" name="__codelineno-74-22" href="#__codelineno-74-22"></a>
<a id="__codelineno-74-23" name="__codelineno-74-23" href="#__codelineno-74-23"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-74-24" name="__codelineno-74-24" href="#__codelineno-74-24"></a><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">index</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-74-25" name="__codelineno-74-25" href="#__codelineno-74-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-74-25" name="__codelineno-74-25" href="#__codelineno-74-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-74-26" name="__codelineno-74-26" href="#__codelineno-74-26"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="n">size</span><span class="p">)</span>
<a id="__codelineno-74-27" name="__codelineno-74-27" href="#__codelineno-74-27"></a><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">IndexOutOfBoundsException</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">);</span>
<a id="__codelineno-74-28" name="__codelineno-74-28" href="#__codelineno-74-28"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arr</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="p">;</span>
@@ -4631,13 +4631,13 @@
<a id="__codelineno-74-72" name="__codelineno-74-72" href="#__codelineno-74-72"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-74-73" name="__codelineno-74-73" href="#__codelineno-74-73"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-74-74" name="__codelineno-74-74" href="#__codelineno-74-74"></a><span class="w"> </span><span class="n">size</span><span class="o">--</span><span class="p">;</span>
<a id="__codelineno-74-75" name="__codelineno-74-75" href="#__codelineno-74-75"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-74-75" name="__codelineno-74-75" href="#__codelineno-74-75"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-74-76" name="__codelineno-74-76" href="#__codelineno-74-76"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-74-77" name="__codelineno-74-77" href="#__codelineno-74-77"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-74-78" name="__codelineno-74-78" href="#__codelineno-74-78"></a>
<a id="__codelineno-74-79" name="__codelineno-74-79" href="#__codelineno-74-79"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-74-80" name="__codelineno-74-80" href="#__codelineno-74-80"></a><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">extendCapacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-74-81" name="__codelineno-74-81" href="#__codelineno-74-81"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-74-81" name="__codelineno-74-81" href="#__codelineno-74-81"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-74-82" name="__codelineno-74-82" href="#__codelineno-74-82"></a><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Arrays</span><span class="p">.</span><span class="na">copyOf</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">extendRatio</span><span class="p">);</span>
<a id="__codelineno-74-83" name="__codelineno-74-83" href="#__codelineno-74-83"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
<a id="__codelineno-74-84" name="__codelineno-74-84" href="#__codelineno-74-84"></a><span class="w"> </span><span class="n">capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arr</span><span class="p">.</span><span class="na">length</span><span class="p">;</span>
@@ -4681,7 +4681,7 @@
<a id="__codelineno-75-22" name="__codelineno-75-22" href="#__codelineno-75-22"></a>
<a id="__codelineno-75-23" name="__codelineno-75-23" href="#__codelineno-75-23"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-75-24" name="__codelineno-75-24" href="#__codelineno-75-24"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">Get</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">index</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-75-25" name="__codelineno-75-25" href="#__codelineno-75-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-75-25" name="__codelineno-75-25" href="#__codelineno-75-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-75-26" name="__codelineno-75-26" href="#__codelineno-75-26"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="n">arrSize</span><span class="p">)</span>
<a id="__codelineno-75-27" name="__codelineno-75-27" href="#__codelineno-75-27"></a><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="nf">IndexOutOfRangeException</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">);</span>
<a id="__codelineno-75-28" name="__codelineno-75-28" href="#__codelineno-75-28"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
@@ -4731,13 +4731,13 @@
<a id="__codelineno-75-72" name="__codelineno-75-72" href="#__codelineno-75-72"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-75-73" name="__codelineno-75-73" href="#__codelineno-75-73"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-75-74" name="__codelineno-75-74" href="#__codelineno-75-74"></a><span class="w"> </span><span class="n">arrSize</span><span class="o">--</span><span class="p">;</span>
<a id="__codelineno-75-75" name="__codelineno-75-75" href="#__codelineno-75-75"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-75-75" name="__codelineno-75-75" href="#__codelineno-75-75"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-75-76" name="__codelineno-75-76" href="#__codelineno-75-76"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-75-77" name="__codelineno-75-77" href="#__codelineno-75-77"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-75-78" name="__codelineno-75-78" href="#__codelineno-75-78"></a>
<a id="__codelineno-75-79" name="__codelineno-75-79" href="#__codelineno-75-79"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-75-80" name="__codelineno-75-80" href="#__codelineno-75-80"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">ExtendCapacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-75-81" name="__codelineno-75-81" href="#__codelineno-75-81"></a><span class="w"> </span><span class="c1">// 新建一个长度为 arrCapacity * extendRatio 的数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-75-81" name="__codelineno-75-81" href="#__codelineno-75-81"></a><span class="w"> </span><span class="c1">// 新建一个长度为 arrCapacity * extendRatio 的数组,并将原数组复制到新数组</span>
<a id="__codelineno-75-82" name="__codelineno-75-82" href="#__codelineno-75-82"></a><span class="w"> </span><span class="n">Array</span><span class="p">.</span><span class="n">Resize</span><span class="p">(</span><span class="k">ref</span><span class="w"> </span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="n">arrCapacity</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">extendRatio</span><span class="p">);</span>
<a id="__codelineno-75-83" name="__codelineno-75-83" href="#__codelineno-75-83"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
<a id="__codelineno-75-84" name="__codelineno-75-84" href="#__codelineno-75-84"></a><span class="w"> </span><span class="n">arrCapacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arr</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span>
@@ -4786,7 +4786,7 @@
<a id="__codelineno-76-28" name="__codelineno-76-28" href="#__codelineno-76-28"></a>
<a id="__codelineno-76-29" name="__codelineno-76-29" href="#__codelineno-76-29"></a><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-76-30" name="__codelineno-76-30" href="#__codelineno-76-30"></a><span class="kd">func</span><span class="w"> </span><span class="p">(</span><span class="nx">l</span><span class="w"> </span><span class="o">*</span><span class="nx">myList</span><span class="p">)</span><span class="w"> </span><span class="nx">get</span><span class="p">(</span><span class="nx">index</span><span class="w"> </span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-76-31" name="__codelineno-76-31" href="#__codelineno-76-31"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-76-31" name="__codelineno-76-31" href="#__codelineno-76-31"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-76-32" name="__codelineno-76-32" href="#__codelineno-76-32"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">index</span><span class="w"> </span><span class="p">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="nx">l</span><span class="p">.</span><span class="nx">arrSize</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-76-33" name="__codelineno-76-33" href="#__codelineno-76-33"></a><span class="w"> </span><span class="nb">panic</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)</span>
<a id="__codelineno-76-34" name="__codelineno-76-34" href="#__codelineno-76-34"></a><span class="w"> </span><span class="p">}</span>
@@ -4842,13 +4842,13 @@
<a id="__codelineno-76-84" name="__codelineno-76-84" href="#__codelineno-76-84"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-76-85" name="__codelineno-76-85" href="#__codelineno-76-85"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-76-86" name="__codelineno-76-86" href="#__codelineno-76-86"></a><span class="w"> </span><span class="nx">l</span><span class="p">.</span><span class="nx">arrSize</span><span class="o">--</span>
<a id="__codelineno-76-87" name="__codelineno-76-87" href="#__codelineno-76-87"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-76-87" name="__codelineno-76-87" href="#__codelineno-76-87"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-76-88" name="__codelineno-76-88" href="#__codelineno-76-88"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">num</span>
<a id="__codelineno-76-89" name="__codelineno-76-89" href="#__codelineno-76-89"></a><span class="p">}</span>
<a id="__codelineno-76-90" name="__codelineno-76-90" href="#__codelineno-76-90"></a>
<a id="__codelineno-76-91" name="__codelineno-76-91" href="#__codelineno-76-91"></a><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-76-92" name="__codelineno-76-92" href="#__codelineno-76-92"></a><span class="kd">func</span><span class="w"> </span><span class="p">(</span><span class="nx">l</span><span class="w"> </span><span class="o">*</span><span class="nx">myList</span><span class="p">)</span><span class="w"> </span><span class="nx">extendCapacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-76-93" name="__codelineno-76-93" href="#__codelineno-76-93"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-76-93" name="__codelineno-76-93" href="#__codelineno-76-93"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-76-94" name="__codelineno-76-94" href="#__codelineno-76-94"></a><span class="w"> </span><span class="nx">l</span><span class="p">.</span><span class="nx">arr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">append</span><span class="p">(</span><span class="nx">l</span><span class="p">.</span><span class="nx">arr</span><span class="p">,</span><span class="w"> </span><span class="nb">make</span><span class="p">([]</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="nx">l</span><span class="p">.</span><span class="nx">arrCapacity</span><span class="o">*</span><span class="p">(</span><span class="nx">l</span><span class="p">.</span><span class="nx">extendRatio</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span><span class="o">...</span><span class="p">)</span>
<a id="__codelineno-76-95" name="__codelineno-76-95" href="#__codelineno-76-95"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
<a id="__codelineno-76-96" name="__codelineno-76-96" href="#__codelineno-76-96"></a><span class="w"> </span><span class="nx">l</span><span class="p">.</span><span class="nx">arrCapacity</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">len</span><span class="p">(</span><span class="nx">l</span><span class="p">.</span><span class="nx">arr</span><span class="p">)</span>
@@ -4943,13 +4943,13 @@
<a id="__codelineno-77-79" name="__codelineno-77-79" href="#__codelineno-77-79"></a> <span class="p">}</span>
<a id="__codelineno-77-80" name="__codelineno-77-80" href="#__codelineno-77-80"></a> <span class="c1">// 更新元素数量</span>
<a id="__codelineno-77-81" name="__codelineno-77-81" href="#__codelineno-77-81"></a> <span class="n">_size</span> <span class="o">-=</span> <span class="mi">1</span>
<a id="__codelineno-77-82" name="__codelineno-77-82" href="#__codelineno-77-82"></a> <span class="c1">// 返回被删除元素</span>
<a id="__codelineno-77-82" name="__codelineno-77-82" href="#__codelineno-77-82"></a> <span class="c1">// 返回被删除元素</span>
<a id="__codelineno-77-83" name="__codelineno-77-83" href="#__codelineno-77-83"></a> <span class="k">return</span> <span class="n">num</span>
<a id="__codelineno-77-84" name="__codelineno-77-84" href="#__codelineno-77-84"></a> <span class="p">}</span>
<a id="__codelineno-77-85" name="__codelineno-77-85" href="#__codelineno-77-85"></a>
<a id="__codelineno-77-86" name="__codelineno-77-86" href="#__codelineno-77-86"></a> <span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-77-87" name="__codelineno-77-87" href="#__codelineno-77-87"></a> <span class="kd">func</span> <span class="nf">extendCapacity</span><span class="p">()</span> <span class="p">{</span>
<a id="__codelineno-77-88" name="__codelineno-77-88" href="#__codelineno-77-88"></a> <span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-77-88" name="__codelineno-77-88" href="#__codelineno-77-88"></a> <span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-77-89" name="__codelineno-77-89" href="#__codelineno-77-89"></a> <span class="n">arr</span> <span class="p">=</span> <span class="n">arr</span> <span class="o">+</span> <span class="nb">Array</span><span class="p">(</span><span class="n">repeating</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">count</span><span class="p">:</span> <span class="n">_capacity</span> <span class="o">*</span> <span class="p">(</span><span class="n">extendRatio</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
<a id="__codelineno-77-90" name="__codelineno-77-90" href="#__codelineno-77-90"></a> <span class="c1">// 更新列表容量</span>
<a id="__codelineno-77-91" name="__codelineno-77-91" href="#__codelineno-77-91"></a> <span class="n">_capacity</span> <span class="p">=</span> <span class="n">arr</span><span class="p">.</span><span class="bp">count</span>
@@ -4991,7 +4991,7 @@
<a id="__codelineno-78-22" name="__codelineno-78-22" href="#__codelineno-78-22"></a>
<a id="__codelineno-78-23" name="__codelineno-78-23" href="#__codelineno-78-23"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-78-24" name="__codelineno-78-24" href="#__codelineno-78-24"></a><span class="w"> </span><span class="nx">get</span><span class="p">(</span><span class="nx">index</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-78-25" name="__codelineno-78-25" href="#__codelineno-78-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-78-25" name="__codelineno-78-25" href="#__codelineno-78-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-78-26" name="__codelineno-78-26" href="#__codelineno-78-26"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mf">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">size</span><span class="p">)</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;索引越界&#39;</span><span class="p">);</span>
<a id="__codelineno-78-27" name="__codelineno-78-27" href="#__codelineno-78-27"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">arr</span><span class="p">[</span><span class="nx">index</span><span class="p">];</span>
<a id="__codelineno-78-28" name="__codelineno-78-28" href="#__codelineno-78-28"></a><span class="w"> </span><span class="p">}</span>
@@ -5039,13 +5039,13 @@
<a id="__codelineno-78-70" name="__codelineno-78-70" href="#__codelineno-78-70"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-78-71" name="__codelineno-78-71" href="#__codelineno-78-71"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-78-72" name="__codelineno-78-72" href="#__codelineno-78-72"></a><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">size</span><span class="o">--</span><span class="p">;</span>
<a id="__codelineno-78-73" name="__codelineno-78-73" href="#__codelineno-78-73"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-78-73" name="__codelineno-78-73" href="#__codelineno-78-73"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-78-74" name="__codelineno-78-74" href="#__codelineno-78-74"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">num</span><span class="p">;</span>
<a id="__codelineno-78-75" name="__codelineno-78-75" href="#__codelineno-78-75"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-78-76" name="__codelineno-78-76" href="#__codelineno-78-76"></a>
<a id="__codelineno-78-77" name="__codelineno-78-77" href="#__codelineno-78-77"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-78-78" name="__codelineno-78-78" href="#__codelineno-78-78"></a><span class="w"> </span><span class="nx">extendCapacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-78-79" name="__codelineno-78-79" href="#__codelineno-78-79"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-78-79" name="__codelineno-78-79" href="#__codelineno-78-79"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extendRatio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-78-80" name="__codelineno-78-80" href="#__codelineno-78-80"></a><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">arr</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span>
<a id="__codelineno-78-81" name="__codelineno-78-81" href="#__codelineno-78-81"></a><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">capacity</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">extendRatio</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">))</span>
<a id="__codelineno-78-82" name="__codelineno-78-82" href="#__codelineno-78-82"></a><span class="w"> </span><span class="p">);</span>
@@ -5091,7 +5091,7 @@
<a id="__codelineno-79-22" name="__codelineno-79-22" href="#__codelineno-79-22"></a>
<a id="__codelineno-79-23" name="__codelineno-79-23" href="#__codelineno-79-23"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-79-24" name="__codelineno-79-24" href="#__codelineno-79-24"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nx">get</span><span class="p">(</span><span class="nx">index</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-79-25" name="__codelineno-79-25" href="#__codelineno-79-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-79-25" name="__codelineno-79-25" href="#__codelineno-79-25"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-79-26" name="__codelineno-79-26" href="#__codelineno-79-26"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mf">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_size</span><span class="p">)</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;索引越界&#39;</span><span class="p">);</span>
<a id="__codelineno-79-27" name="__codelineno-79-27" href="#__codelineno-79-27"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">arr</span><span class="p">[</span><span class="nx">index</span><span class="p">];</span>
<a id="__codelineno-79-28" name="__codelineno-79-28" href="#__codelineno-79-28"></a><span class="w"> </span><span class="p">}</span>
@@ -5137,13 +5137,13 @@
<a id="__codelineno-79-68" name="__codelineno-79-68" href="#__codelineno-79-68"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-79-69" name="__codelineno-79-69" href="#__codelineno-79-69"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-79-70" name="__codelineno-79-70" href="#__codelineno-79-70"></a><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_size</span><span class="o">--</span><span class="p">;</span>
<a id="__codelineno-79-71" name="__codelineno-79-71" href="#__codelineno-79-71"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-79-71" name="__codelineno-79-71" href="#__codelineno-79-71"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-79-72" name="__codelineno-79-72" href="#__codelineno-79-72"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">num</span><span class="p">;</span>
<a id="__codelineno-79-73" name="__codelineno-79-73" href="#__codelineno-79-73"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-79-74" name="__codelineno-79-74" href="#__codelineno-79-74"></a>
<a id="__codelineno-79-75" name="__codelineno-79-75" href="#__codelineno-79-75"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-79-76" name="__codelineno-79-76" href="#__codelineno-79-76"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nx">extendCapacity</span><span class="p">()</span><span class="o">:</span><span class="w"> </span><span class="ow">void</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-79-77" name="__codelineno-79-77" href="#__codelineno-79-77"></a><span class="w"> </span><span class="c1">// 新建一个长度为 size 的数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-79-77" name="__codelineno-79-77" href="#__codelineno-79-77"></a><span class="w"> </span><span class="c1">// 新建一个长度为 size 的数组,并将原数组复制到新数组</span>
<a id="__codelineno-79-78" name="__codelineno-79-78" href="#__codelineno-79-78"></a><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">arr</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span>
<a id="__codelineno-79-79" name="__codelineno-79-79" href="#__codelineno-79-79"></a><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">capacity</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">extendRatio</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">))</span>
<a id="__codelineno-79-80" name="__codelineno-79-80" href="#__codelineno-79-80"></a><span class="w"> </span><span class="p">);</span>
@@ -5228,7 +5228,7 @@
<a id="__codelineno-80-61" name="__codelineno-80-61" href="#__codelineno-80-61"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-80-62" name="__codelineno-80-62" href="#__codelineno-80-62"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-80-63" name="__codelineno-80-63" href="#__codelineno-80-63"></a><span class="w"> </span><span class="n">_size</span><span class="o">--</span><span class="p">;</span>
<a id="__codelineno-80-64" name="__codelineno-80-64" href="#__codelineno-80-64"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-80-64" name="__codelineno-80-64" href="#__codelineno-80-64"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-80-65" name="__codelineno-80-65" href="#__codelineno-80-65"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">_num</span><span class="p">;</span>
<a id="__codelineno-80-66" name="__codelineno-80-66" href="#__codelineno-80-66"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-80-67" name="__codelineno-80-67" href="#__codelineno-80-67"></a>
@@ -5236,7 +5236,7 @@
<a id="__codelineno-80-69" name="__codelineno-80-69" href="#__codelineno-80-69"></a><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">extendCapacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-80-70" name="__codelineno-80-70" href="#__codelineno-80-70"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 _extendRatio 倍的新数组</span>
<a id="__codelineno-80-71" name="__codelineno-80-71" href="#__codelineno-80-71"></a><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">_newNums</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">List</span><span class="p">.</span><span class="n">filled</span><span class="p">(</span><span class="n">_capacity</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_extendRatio</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">);</span>
<a id="__codelineno-80-72" name="__codelineno-80-72" href="#__codelineno-80-72"></a><span class="w"> </span><span class="c1">// 将原数组拷贝到新数组</span>
<a id="__codelineno-80-72" name="__codelineno-80-72" href="#__codelineno-80-72"></a><span class="w"> </span><span class="c1">// 将原数组复制到新数组</span>
<a id="__codelineno-80-73" name="__codelineno-80-73" href="#__codelineno-80-73"></a><span class="w"> </span><span class="n">List</span><span class="p">.</span><span class="n">copyRange</span><span class="p">(</span><span class="n">_newNums</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="n">_arr</span><span class="p">);</span>
<a id="__codelineno-80-74" name="__codelineno-80-74" href="#__codelineno-80-74"></a><span class="w"> </span><span class="c1">// 更新 _arr 的引用</span>
<a id="__codelineno-80-75" name="__codelineno-80-75" href="#__codelineno-80-75"></a><span class="w"> </span><span class="n">_arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_newNums</span><span class="p">;</span>
@@ -5291,7 +5291,7 @@
<a id="__codelineno-81-33" name="__codelineno-81-33" href="#__codelineno-81-33"></a>
<a id="__codelineno-81-34" name="__codelineno-81-34" href="#__codelineno-81-34"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-81-35" name="__codelineno-81-35" href="#__codelineno-81-35"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">get</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">i32</span> <span class="p">{</span>
<a id="__codelineno-81-36" name="__codelineno-81-36" href="#__codelineno-81-36"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-81-36" name="__codelineno-81-36" href="#__codelineno-81-36"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-81-37" name="__codelineno-81-37" href="#__codelineno-81-37"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)};</span>
<a id="__codelineno-81-38" name="__codelineno-81-38" href="#__codelineno-81-38"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
<a id="__codelineno-81-39" name="__codelineno-81-39" href="#__codelineno-81-39"></a><span class="w"> </span><span class="p">}</span>
@@ -5339,13 +5339,13 @@
<a id="__codelineno-81-81" name="__codelineno-81-81" href="#__codelineno-81-81"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-82" name="__codelineno-81-82" href="#__codelineno-81-82"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-83" name="__codelineno-81-83" href="#__codelineno-81-83"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-84" name="__codelineno-81-84" href="#__codelineno-81-84"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-81-84" name="__codelineno-81-84" href="#__codelineno-81-84"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-81-85" name="__codelineno-81-85" href="#__codelineno-81-85"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-86" name="__codelineno-81-86" href="#__codelineno-81-86"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-87" name="__codelineno-81-87" href="#__codelineno-81-87"></a>
<a id="__codelineno-81-88" name="__codelineno-81-88" href="#__codelineno-81-88"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-81-89" name="__codelineno-81-89" href="#__codelineno-81-89"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">extend_capacity</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-90" name="__codelineno-81-90" href="#__codelineno-81-90"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extend_ratio 倍的新数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-81-90" name="__codelineno-81-90" href="#__codelineno-81-90"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extend_ratio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-81-91" name="__codelineno-81-91" href="#__codelineno-81-91"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">new_capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_ratio</span><span class="p">;</span>
<a id="__codelineno-81-92" name="__codelineno-81-92" href="#__codelineno-81-92"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">new_capacity</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<a id="__codelineno-81-93" name="__codelineno-81-93" href="#__codelineno-81-93"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
@@ -5512,14 +5512,14 @@
<a id="__codelineno-83-38" name="__codelineno-83-38" href="#__codelineno-83-38"></a>
<a id="__codelineno-83-39" name="__codelineno-83-39" href="#__codelineno-83-39"></a><span class="w"> </span><span class="c1">// 访问元素</span>
<a id="__codelineno-83-40" name="__codelineno-83-40" href="#__codelineno-83-40"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">get</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-83-41" name="__codelineno-83-41" href="#__codelineno-83-41"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-83-41" name="__codelineno-83-41" href="#__codelineno-83-41"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-83-42" name="__codelineno-83-42" href="#__codelineno-83-42"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">);</span>
<a id="__codelineno-83-43" name="__codelineno-83-43" href="#__codelineno-83-43"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
<a id="__codelineno-83-44" name="__codelineno-83-44" href="#__codelineno-83-44"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
<a id="__codelineno-83-45" name="__codelineno-83-45" href="#__codelineno-83-45"></a>
<a id="__codelineno-83-46" name="__codelineno-83-46" href="#__codelineno-83-46"></a><span class="w"> </span><span class="c1">// 更新元素</span>
<a id="__codelineno-83-47" name="__codelineno-83-47" href="#__codelineno-83-47"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">set</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-83-48" name="__codelineno-83-48" href="#__codelineno-83-48"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-83-48" name="__codelineno-83-48" href="#__codelineno-83-48"></a><span class="w"> </span><span class="c1">// 索引如果越界则抛出异常,下同</span>
<a id="__codelineno-83-49" name="__codelineno-83-49" href="#__codelineno-83-49"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">);</span>
<a id="__codelineno-83-50" name="__codelineno-83-50" href="#__codelineno-83-50"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-83-51" name="__codelineno-83-51" href="#__codelineno-83-51"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
@@ -5559,13 +5559,13 @@
<a id="__codelineno-83-85" name="__codelineno-83-85" href="#__codelineno-83-85"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-83-86" name="__codelineno-83-86" href="#__codelineno-83-86"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-83-87" name="__codelineno-83-87" href="#__codelineno-83-87"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-83-88" name="__codelineno-83-88" href="#__codelineno-83-88"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-83-88" name="__codelineno-83-88" href="#__codelineno-83-88"></a><span class="w"> </span><span class="c1">// 返回被删除元素</span>
<a id="__codelineno-83-89" name="__codelineno-83-89" href="#__codelineno-83-89"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-83-90" name="__codelineno-83-90" href="#__codelineno-83-90"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-83-91" name="__codelineno-83-91" href="#__codelineno-83-91"></a>
<a id="__codelineno-83-92" name="__codelineno-83-92" href="#__codelineno-83-92"></a><span class="w"> </span><span class="c1">// 列表扩容</span>
<a id="__codelineno-83-93" name="__codelineno-83-93" href="#__codelineno-83-93"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">extendCapacity</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-83-94" name="__codelineno-83-94" href="#__codelineno-83-94"></a><span class="w"> </span><span class="c1">// 新建一个长度为 size * extendRatio 的数组,并将原数组拷贝到新数组</span>
<a id="__codelineno-83-94" name="__codelineno-83-94" href="#__codelineno-83-94"></a><span class="w"> </span><span class="c1">// 新建一个长度为 size * extendRatio 的数组,并将原数组复制到新数组</span>
<a id="__codelineno-83-95" name="__codelineno-83-95" href="#__codelineno-83-95"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">newCapacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendRatio</span><span class="p">;</span>
<a id="__codelineno-83-96" name="__codelineno-83-96" href="#__codelineno-83-96"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">extend</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">newCapacity</span><span class="p">);</span>
<a id="__codelineno-83-97" name="__codelineno-83-97" href="#__codelineno-83-97"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">extend</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>

View File

@@ -1796,7 +1796,7 @@
<span class="md-ellipsis">
8.3 &nbsp; Top-K 问题
8.3 &nbsp; Top-k 问题
</span>

View File

@@ -1779,7 +1779,7 @@
<span class="md-ellipsis">
8.3 &nbsp; Top-K 问题
8.3 &nbsp; Top-k 问题
</span>
@@ -3519,9 +3519,8 @@
<ul>
<li>数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和分散空间存储。两者的特点呈现出互补的特性。</li>
<li>数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。</li>
<li>链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占用内存较多。</li>
<li>常见的链表类型包括单向链表、环形链表、双向链表,它们分别具有各自的应用场景</li>
<li>列表是一种支持增删查改的元素有序集合,通常基于动态数组实现,其保留了数组的优势,同时可以灵活调整长度。</li>
<li>链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占用内存较多。常见的链表类型包括单向链表、环形链表、双向链表。</li>
<li>列表是一种支持增删查改的元素有序集合,通常基于动态数组实现,它保留了数组的优势,同时可以灵活调整长度</li>
<li>列表的出现大幅地提高了数组的实用性,但可能导致部分内存空间浪费。</li>
<li>程序运行时,数据主要存储在内存中。数组可提供更高的内存空间效率,而链表则在内存使用上更加灵活。</li>
<li>缓存通过缓存行、预取机制以及空间局部性和时间局部性等数据加载机制,为 CPU 提供快速数据访问,显著提升程序的执行效率。</li>
@@ -3539,13 +3538,13 @@
</div>
<div class="admonition question">
<p class="admonition-title">为什么数组要求相同类型的元素,而在链表中却没有强调同类型呢?</p>
<p>链表由节点组成,节点之间通过引用(指针)连接,各个节点可以存储不同类型的数据,例如 int、double、string、object 等。</p>
<p>相对地,数组元素则必须是相同类型的,这样才能通过计算偏移量来获取对应元素位置。例如,数组同时包含 int 和 long 两种类型,单个元素分别占用 4 bytes 和 8 bytes ,此时就不能用以下公式计算偏移量了,因为数组中包含了两种长度的元素</p>
<p>链表由节点组成,节点之间通过引用(指针)连接,各个节点可以存储不同类型的数据,例如 <code>int</code><code>double</code><code>string</code><code>object</code> 等。</p>
<p>相对地,数组元素则必须是相同类型的,这样才能通过计算偏移量来获取对应元素位置。例如,数组同时包含 <code>int</code><code>long</code> 两种类型,单个元素分别占用 4 字节 和 8 字节 ,此时就不能用以下公式计算偏移量了,因为数组中包含了两种“元素长度”</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># 元素内存地址 = 数组内存地址 + 元素长度 * 元素索引</span>
</code></pre></div>
</div>
<div class="admonition question">
<p class="admonition-title">删除节点后,是否需要把 <code>P.next</code> 设为 <span class="arithmatex">\(\text{None}\)</span> 呢?</p>
<p class="admonition-title">删除节点后,是否需要把 <code>P.next</code> 设为 <code>None</code> 呢?</p>
<p>不修改 <code>P.next</code> 也可以。从该链表的角度看,从头节点遍历到尾节点已经不会遇到 <code>P</code> 了。这意味着节点 <code>P</code> 已经从链表中删除了,此时节点 <code>P</code> 指向哪里都不会对该链表产生影响。</p>
<p>从垃圾回收的角度看,对于 Java、Python、Go 等拥有自动垃圾回收机制的语言来说,节点 <code>P</code> 是否被回收取决于是否仍存在指向它的引用,而不是 <code>P.next</code> 的值。在 C 和 C++ 等语言中,我们需要手动释放节点内存。</p>
</div>
@@ -3557,7 +3556,7 @@
<p class="admonition-title">图“链表定义与存储方式”中,浅蓝色的存储节点指针是占用一块内存地址吗?还是和节点值各占一半呢?</p>
<p>该示意图只是定性表示,定量表示需要根据具体情况进行分析。</p>
<ul>
<li>不同类型的节点值占用的空间是不同的,比如 int、long、double 和实例对象等。</li>
<li>不同类型的节点值占用的空间是不同的,比如 <code>int</code><code>long</code><code>double</code> 和实例对象等。</li>
<li>指针变量占用的内存空间大小根据所使用的操作系统及编译环境而定,大多为 8 字节或 4 字节。</li>
</ul>
</div>