mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-14 11:36:08 +08:00
deploy
This commit is contained in:
@ -3296,22 +3296,22 @@
|
|||||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1621" class="md-nav__link">
|
<a href="#1" class="md-nav__link">
|
||||||
16.2.1 内容微调
|
1. 内容微调
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1622" class="md-nav__link">
|
<a href="#2" class="md-nav__link">
|
||||||
16.2.2 内容创作
|
2. 内容创作
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1623-docker" class="md-nav__link">
|
<a href="#3-docker" class="md-nav__link">
|
||||||
16.2.3 Docker 部署
|
3. Docker 部署
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@ -3412,22 +3412,22 @@
|
|||||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1621" class="md-nav__link">
|
<a href="#1" class="md-nav__link">
|
||||||
16.2.1 内容微调
|
1. 内容微调
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1622" class="md-nav__link">
|
<a href="#2" class="md-nav__link">
|
||||||
16.2.2 内容创作
|
2. 内容创作
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1623-docker" class="md-nav__link">
|
<a href="#3-docker" class="md-nav__link">
|
||||||
16.2.3 Docker 部署
|
3. Docker 部署
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@ -3463,7 +3463,7 @@
|
|||||||
<p>纸质书籍的两次印刷的间隔时间往往需要数年,内容更新非常不方便。</p>
|
<p>纸质书籍的两次印刷的间隔时间往往需要数年,内容更新非常不方便。</p>
|
||||||
<p>然而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。</p>
|
<p>然而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。</p>
|
||||||
</div>
|
</div>
|
||||||
<h2 id="1621">16.2.1 内容微调<a class="headerlink" href="#1621" title="Permanent link">¶</a></h2>
|
<h3 id="1">1. 内容微调<a class="headerlink" href="#1" title="Permanent link">¶</a></h3>
|
||||||
<p>如图 16-1 所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。</p>
|
<p>如图 16-1 所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。</p>
|
||||||
<ol>
|
<ol>
|
||||||
<li>点击“编辑图标”,如果遇到“需要 Fork 此仓库”的提示,请同意该操作。</li>
|
<li>点击“编辑图标”,如果遇到“需要 Fork 此仓库”的提示,请同意该操作。</li>
|
||||||
@ -3474,7 +3474,7 @@
|
|||||||
<p align="center"> 图 16-1 页面编辑按键 </p>
|
<p align="center"> 图 16-1 页面编辑按键 </p>
|
||||||
|
|
||||||
<p>图片无法直接修改,需要通过新建 <a href="https://github.com/krahets/hello-algo/issues">Issue</a> 或评论留言来描述问题,我们会尽快重新绘制并替换图片。</p>
|
<p>图片无法直接修改,需要通过新建 <a href="https://github.com/krahets/hello-algo/issues">Issue</a> 或评论留言来描述问题,我们会尽快重新绘制并替换图片。</p>
|
||||||
<h2 id="1622">16.2.2 内容创作<a class="headerlink" href="#1622" title="Permanent link">¶</a></h2>
|
<h3 id="2">2. 内容创作<a class="headerlink" href="#2" title="Permanent link">¶</a></h3>
|
||||||
<p>如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。</p>
|
<p>如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。</p>
|
||||||
<ol>
|
<ol>
|
||||||
<li>登录 GitHub ,将<a href="https://github.com/krahets/hello-algo">本仓库</a> Fork 到个人账号下。</li>
|
<li>登录 GitHub ,将<a href="https://github.com/krahets/hello-algo">本仓库</a> Fork 到个人账号下。</li>
|
||||||
@ -3483,7 +3483,7 @@
|
|||||||
<li>将本地所做更改 Commit ,然后 Push 至远程仓库。</li>
|
<li>将本地所做更改 Commit ,然后 Push 至远程仓库。</li>
|
||||||
<li>刷新仓库网页,点击“Create pull request”按钮即可发起拉取请求。</li>
|
<li>刷新仓库网页,点击“Create pull request”按钮即可发起拉取请求。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1623-docker">16.2.3 Docker 部署<a class="headerlink" href="#1623-docker" title="Permanent link">¶</a></h2>
|
<h3 id="3-docker">3. Docker 部署<a class="headerlink" href="#3-docker" title="Permanent link">¶</a></h3>
|
||||||
<p>执行以下 Docker 脚本,稍等片刻,即可在网页 <code>http://localhost:8000</code> 访问本项目。</p>
|
<p>执行以下 Docker 脚本,稍等片刻,即可在网页 <code>http://localhost:8000</code> 访问本项目。</p>
|
||||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/krahets/hello-algo.git
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/krahets/hello-algo.git
|
||||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nb">cd</span><span class="w"> </span>hello-algo
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="nb">cd</span><span class="w"> </span>hello-algo
|
||||||
|
@ -3276,71 +3276,71 @@
|
|||||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1611-vscode" class="md-nav__link">
|
<a href="#1-vscode" class="md-nav__link">
|
||||||
16.1.1 VSCode
|
1. VSCode
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1612-java" class="md-nav__link">
|
<a href="#2-java" class="md-nav__link">
|
||||||
16.1.2 Java 环境
|
2. Java 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1613-cc" class="md-nav__link">
|
<a href="#3-cc" class="md-nav__link">
|
||||||
16.1.3 C/C++ 环境
|
3. C/C++ 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1614-python" class="md-nav__link">
|
<a href="#4-python" class="md-nav__link">
|
||||||
16.1.4 Python 环境
|
4. Python 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1615-go" class="md-nav__link">
|
<a href="#5-go" class="md-nav__link">
|
||||||
16.1.5 Go 环境
|
5. Go 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1616-javascript" class="md-nav__link">
|
<a href="#6-javascript" class="md-nav__link">
|
||||||
16.1.6 JavaScript 环境
|
6. JavaScript 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1617-c" class="md-nav__link">
|
<a href="#7-c" class="md-nav__link">
|
||||||
16.1.7 C# 环境
|
7. C# 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1618-swift" class="md-nav__link">
|
<a href="#8-swift" class="md-nav__link">
|
||||||
16.1.8 Swift 环境
|
8. Swift 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1619-dart" class="md-nav__link">
|
<a href="#9-dart" class="md-nav__link">
|
||||||
16.1.9 Dart 环境
|
9. Dart 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#16110-rust" class="md-nav__link">
|
<a href="#10-rust" class="md-nav__link">
|
||||||
16.1.10 Rust 环境
|
10. Rust 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@ -3461,71 +3461,71 @@
|
|||||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1611-vscode" class="md-nav__link">
|
<a href="#1-vscode" class="md-nav__link">
|
||||||
16.1.1 VSCode
|
1. VSCode
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1612-java" class="md-nav__link">
|
<a href="#2-java" class="md-nav__link">
|
||||||
16.1.2 Java 环境
|
2. Java 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1613-cc" class="md-nav__link">
|
<a href="#3-cc" class="md-nav__link">
|
||||||
16.1.3 C/C++ 环境
|
3. C/C++ 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1614-python" class="md-nav__link">
|
<a href="#4-python" class="md-nav__link">
|
||||||
16.1.4 Python 环境
|
4. Python 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1615-go" class="md-nav__link">
|
<a href="#5-go" class="md-nav__link">
|
||||||
16.1.5 Go 环境
|
5. Go 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1616-javascript" class="md-nav__link">
|
<a href="#6-javascript" class="md-nav__link">
|
||||||
16.1.6 JavaScript 环境
|
6. JavaScript 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1617-c" class="md-nav__link">
|
<a href="#7-c" class="md-nav__link">
|
||||||
16.1.7 C# 环境
|
7. C# 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1618-swift" class="md-nav__link">
|
<a href="#8-swift" class="md-nav__link">
|
||||||
16.1.8 Swift 环境
|
8. Swift 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#1619-dart" class="md-nav__link">
|
<a href="#9-dart" class="md-nav__link">
|
||||||
16.1.9 Dart 环境
|
9. Dart 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="md-nav__item">
|
<li class="md-nav__item">
|
||||||
<a href="#16110-rust" class="md-nav__link">
|
<a href="#10-rust" class="md-nav__link">
|
||||||
16.1.10 Rust 环境
|
10. Rust 环境
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@ -3554,54 +3554,54 @@
|
|||||||
|
|
||||||
|
|
||||||
<h1 id="161">16.1 编程环境安装<a class="headerlink" href="#161" title="Permanent link">¶</a></h1>
|
<h1 id="161">16.1 编程环境安装<a class="headerlink" href="#161" title="Permanent link">¶</a></h1>
|
||||||
<h2 id="1611-vscode">16.1.1 VSCode<a class="headerlink" href="#1611-vscode" title="Permanent link">¶</a></h2>
|
<h3 id="1-vscode">1. VSCode<a class="headerlink" href="#1-vscode" title="Permanent link">¶</a></h3>
|
||||||
<p>本书推荐使用开源轻量的 VSCode 作为本地 IDE ,下载并安装 <a href="https://code.visualstudio.com/">VSCode</a> 。</p>
|
<p>本书推荐使用开源轻量的 VSCode 作为本地 IDE ,下载并安装 <a href="https://code.visualstudio.com/">VSCode</a> 。</p>
|
||||||
<h2 id="1612-java">16.1.2 Java 环境<a class="headerlink" href="#1612-java" title="Permanent link">¶</a></h2>
|
<h3 id="2-java">2. Java 环境<a class="headerlink" href="#2-java" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://jdk.java.net/18/">OpenJDK</a>(版本需满足 > JDK 9)。</li>
|
<li>下载并安装 <a href="https://jdk.java.net/18/">OpenJDK</a>(版本需满足 > JDK 9)。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>java</code> ,安装 Extension Pack for Java 。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>java</code> ,安装 Extension Pack for Java 。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1613-cc">16.1.3 C/C++ 环境<a class="headerlink" href="#1613-cc" title="Permanent link">¶</a></h2>
|
<h3 id="3-cc">3. C/C++ 环境<a class="headerlink" href="#3-cc" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>Windows 系统需要安装 <a href="https://sourceforge.net/projects/mingw-w64/files/">MinGW</a>(<a href="https://blog.csdn.net/qq_33698226/article/details/129031241">配置教程</a>),MacOS 自带 Clang 无须安装。</li>
|
<li>Windows 系统需要安装 <a href="https://sourceforge.net/projects/mingw-w64/files/">MinGW</a>(<a href="https://blog.csdn.net/qq_33698226/article/details/129031241">配置教程</a>),MacOS 自带 Clang 无须安装。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>c++</code> ,安装 C/C++ Extension Pack 。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>c++</code> ,安装 C/C++ Extension Pack 。</li>
|
||||||
<li>(可选)打开 Settings 页面,搜索 <code>Clang_format_fallback Style</code> 代码格式化选项,设置为 <code>{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }</code> 。</li>
|
<li>(可选)打开 Settings 页面,搜索 <code>Clang_format_fallback Style</code> 代码格式化选项,设置为 <code>{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }</code> 。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1614-python">16.1.4 Python 环境<a class="headerlink" href="#1614-python" title="Permanent link">¶</a></h2>
|
<h3 id="4-python">4. Python 环境<a class="headerlink" href="#4-python" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://docs.conda.io/en/latest/miniconda.html">Miniconda3</a> 。</li>
|
<li>下载并安装 <a href="https://docs.conda.io/en/latest/miniconda.html">Miniconda3</a> 。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>python</code> ,安装 Python Extension Pack 。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>python</code> ,安装 Python Extension Pack 。</li>
|
||||||
<li>(可选)在命令行输入 <code>pip install black</code> ,安装代码格式化工具。</li>
|
<li>(可选)在命令行输入 <code>pip install black</code> ,安装代码格式化工具。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1615-go">16.1.5 Go 环境<a class="headerlink" href="#1615-go" title="Permanent link">¶</a></h2>
|
<h3 id="5-go">5. Go 环境<a class="headerlink" href="#5-go" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://go.dev/dl/">go</a> 。</li>
|
<li>下载并安装 <a href="https://go.dev/dl/">go</a> 。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>go</code> ,安装 Go 。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>go</code> ,安装 Go 。</li>
|
||||||
<li>快捷键 <code>Ctrl + Shift + P</code> 呼出命令栏,输入 go ,选择 <code>Go: Install/Update Tools</code> ,全部勾选并安装即可。</li>
|
<li>快捷键 <code>Ctrl + Shift + P</code> 呼出命令栏,输入 go ,选择 <code>Go: Install/Update Tools</code> ,全部勾选并安装即可。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1616-javascript">16.1.6 JavaScript 环境<a class="headerlink" href="#1616-javascript" title="Permanent link">¶</a></h2>
|
<h3 id="6-javascript">6. JavaScript 环境<a class="headerlink" href="#6-javascript" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://nodejs.org/en/">node.js</a> 。</li>
|
<li>下载并安装 <a href="https://nodejs.org/en/">node.js</a> 。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>javascript</code> ,安装 JavaScript (ES6) code snippets 。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>javascript</code> ,安装 JavaScript (ES6) code snippets 。</li>
|
||||||
<li>(可选)在 VSCode 的插件市场中搜索 <code>Prettier</code> ,安装代码格式化工具。</li>
|
<li>(可选)在 VSCode 的插件市场中搜索 <code>Prettier</code> ,安装代码格式化工具。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1617-c">16.1.7 C# 环境<a class="headerlink" href="#1617-c" title="Permanent link">¶</a></h2>
|
<h3 id="7-c">7. C# 环境<a class="headerlink" href="#7-c" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://dotnet.microsoft.com/en-us/download">.Net 6.0</a> 。</li>
|
<li>下载并安装 <a href="https://dotnet.microsoft.com/en-us/download">.Net 6.0</a> 。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>C# Dev Kit</code> ,安装 C# Dev Kit (<a href="https://code.visualstudio.com/docs/csharp/get-started">配置教程</a>)。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>C# Dev Kit</code> ,安装 C# Dev Kit (<a href="https://code.visualstudio.com/docs/csharp/get-started">配置教程</a>)。</li>
|
||||||
<li>也可使用 Visual Studio(<a href="https://learn.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022">安装教程</a>)。</li>
|
<li>也可使用 Visual Studio(<a href="https://learn.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022">安装教程</a>)。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1618-swift">16.1.8 Swift 环境<a class="headerlink" href="#1618-swift" title="Permanent link">¶</a></h2>
|
<h3 id="8-swift">8. Swift 环境<a class="headerlink" href="#8-swift" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://www.swift.org/download/">Swift</a>。</li>
|
<li>下载并安装 <a href="https://www.swift.org/download/">Swift</a>。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>swift</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang">Swift for Visual Studio Code</a>。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>swift</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang">Swift for Visual Studio Code</a>。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="1619-dart">16.1.9 Dart 环境<a class="headerlink" href="#1619-dart" title="Permanent link">¶</a></h2>
|
<h3 id="9-dart">9. Dart 环境<a class="headerlink" href="#9-dart" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://dart.dev/get-dart">Dart</a> 。</li>
|
<li>下载并安装 <a href="https://dart.dev/get-dart">Dart</a> 。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>dart</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code">Dart</a> 。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>dart</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code">Dart</a> 。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2 id="16110-rust">16.1.10 Rust 环境<a class="headerlink" href="#16110-rust" title="Permanent link">¶</a></h2>
|
<h3 id="10-rust">10. Rust 环境<a class="headerlink" href="#10-rust" title="Permanent link">¶</a></h3>
|
||||||
<ol>
|
<ol>
|
||||||
<li>下载并安装 <a href="https://www.rust-lang.org/tools/install">Rust</a>。</li>
|
<li>下载并安装 <a href="https://www.rust-lang.org/tools/install">Rust</a>。</li>
|
||||||
<li>在 VSCode 的插件市场中搜索 <code>rust</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer">rust-analyzer</a>。</li>
|
<li>在 VSCode 的插件市场中搜索 <code>rust</code> ,安装 <a href="https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer">rust-analyzer</a>。</li>
|
||||||
|
@ -5040,6 +5040,8 @@
|
|||||||
<p>相比基于前序遍历的代码实现,基于回溯算法框架的代码实现虽然显得啰嗦,但通用性更好。实际上,<strong>许多回溯问题都可以在该框架下解决</strong>。我们只需根据具体问题来定义 <code>state</code> 和 <code>choices</code> ,并实现框架中的各个方法即可。</p>
|
<p>相比基于前序遍历的代码实现,基于回溯算法框架的代码实现虽然显得啰嗦,但通用性更好。实际上,<strong>许多回溯问题都可以在该框架下解决</strong>。我们只需根据具体问题来定义 <code>state</code> 和 <code>choices</code> ,并实现框架中的各个方法即可。</p>
|
||||||
<h2 id="1314">13.1.4 常用术语<a class="headerlink" href="#1314" title="Permanent link">¶</a></h2>
|
<h2 id="1314">13.1.4 常用术语<a class="headerlink" href="#1314" title="Permanent link">¶</a></h2>
|
||||||
<p>为了更清晰地分析算法问题,我们总结一下回溯算法中常用术语的含义,并对照例题三给出对应示例。</p>
|
<p>为了更清晰地分析算法问题,我们总结一下回溯算法中常用术语的含义,并对照例题三给出对应示例。</p>
|
||||||
|
<p align="center"> 表 13-1 常见的回溯算法术语 </p>
|
||||||
|
|
||||||
<div class="center-table">
|
<div class="center-table">
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -3537,8 +3537,8 @@
|
|||||||
|
|
||||||
<h1 id="132">13.2 全排列问题<a class="headerlink" href="#132" title="Permanent link">¶</a></h1>
|
<h1 id="132">13.2 全排列问题<a class="headerlink" href="#132" title="Permanent link">¶</a></h1>
|
||||||
<p>全排列问题是回溯算法的一个典型应用。它的定义是在给定一个集合(如一个数组或字符串)的情况下,找出这个集合中元素的所有可能的排列。</p>
|
<p>全排列问题是回溯算法的一个典型应用。它的定义是在给定一个集合(如一个数组或字符串)的情况下,找出这个集合中元素的所有可能的排列。</p>
|
||||||
<p>表 13-1 列举了几个示例数据,包括输入数组和对应的所有排列。</p>
|
<p>表 13-2 列举了几个示例数据,包括输入数组和对应的所有排列。</p>
|
||||||
<p align="center"> 表 13-1 数组与链表的效率对比 </p>
|
<p align="center"> 表 13-2 数组与链表的效率对比 </p>
|
||||||
|
|
||||||
<div class="center-table">
|
<div class="center-table">
|
||||||
<table>
|
<table>
|
||||||
|
@ -4191,7 +4191,7 @@ T(n) = 3 + 2n
|
|||||||
<ol>
|
<ol>
|
||||||
<li><strong>忽略 <span class="arithmatex">\(T(n)\)</span> 中的常数项</strong>。因为它们都与 <span class="arithmatex">\(n\)</span> 无关,所以对时间复杂度不产生影响。</li>
|
<li><strong>忽略 <span class="arithmatex">\(T(n)\)</span> 中的常数项</strong>。因为它们都与 <span class="arithmatex">\(n\)</span> 无关,所以对时间复杂度不产生影响。</li>
|
||||||
<li><strong>省略所有系数</strong>。例如,循环 <span class="arithmatex">\(2n\)</span> 次、<span class="arithmatex">\(5n + 1\)</span> 次等,都可以简化记为 <span class="arithmatex">\(n\)</span> 次,因为 <span class="arithmatex">\(n\)</span> 前面的系数对时间复杂度没有影响。</li>
|
<li><strong>省略所有系数</strong>。例如,循环 <span class="arithmatex">\(2n\)</span> 次、<span class="arithmatex">\(5n + 1\)</span> 次等,都可以简化记为 <span class="arithmatex">\(n\)</span> 次,因为 <span class="arithmatex">\(n\)</span> 前面的系数对时间复杂度没有影响。</li>
|
||||||
<li><strong>循环嵌套时使用乘法</strong>。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套用第 <code>1.</code> 点和第 <code>2.</code> 点的技巧。、</li>
|
<li><strong>循环嵌套时使用乘法</strong>。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套用第 <code>1.</code> 点和第 <code>2.</code> 点的技巧。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<p>给定一个函数,我们可以用上述技巧来统计操作数量。</p>
|
<p>给定一个函数,我们可以用上述技巧来统计操作数量。</p>
|
||||||
<div class="tabbed-set tabbed-alternate" data-tabs="4:12"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><input id="__tabbed_4_11" name="__tabbed_4" type="radio" /><input id="__tabbed_4_12" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Java</label><label for="__tabbed_4_2">C++</label><label for="__tabbed_4_3">Python</label><label for="__tabbed_4_4">Go</label><label for="__tabbed_4_5">JS</label><label for="__tabbed_4_6">TS</label><label for="__tabbed_4_7">C</label><label for="__tabbed_4_8">C#</label><label for="__tabbed_4_9">Swift</label><label for="__tabbed_4_10">Zig</label><label for="__tabbed_4_11">Dart</label><label for="__tabbed_4_12">Rust</label></div>
|
<div class="tabbed-set tabbed-alternate" data-tabs="4:12"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><input id="__tabbed_4_5" name="__tabbed_4" type="radio" /><input id="__tabbed_4_6" name="__tabbed_4" type="radio" /><input id="__tabbed_4_7" name="__tabbed_4" type="radio" /><input id="__tabbed_4_8" name="__tabbed_4" type="radio" /><input id="__tabbed_4_9" name="__tabbed_4" type="radio" /><input id="__tabbed_4_10" name="__tabbed_4" type="radio" /><input id="__tabbed_4_11" name="__tabbed_4" type="radio" /><input id="__tabbed_4_12" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Java</label><label for="__tabbed_4_2">C++</label><label for="__tabbed_4_3">Python</label><label for="__tabbed_4_4">Go</label><label for="__tabbed_4_5">JS</label><label for="__tabbed_4_6">TS</label><label for="__tabbed_4_7">C</label><label for="__tabbed_4_8">C#</label><label for="__tabbed_4_9">Swift</label><label for="__tabbed_4_10">Zig</label><label for="__tabbed_4_11">Dart</label><label for="__tabbed_4_12">Rust</label></div>
|
||||||
|
@ -3454,7 +3454,7 @@
|
|||||||
<li><strong>反码</strong>:正数的反码与其原码相同,负数的反码是对其原码除符号位外的所有位取反。</li>
|
<li><strong>反码</strong>:正数的反码与其原码相同,负数的反码是对其原码除符号位外的所有位取反。</li>
|
||||||
<li><strong>补码</strong>:正数的补码与其原码相同,负数的补码是在其反码的基础上加 <span class="arithmatex">\(1\)</span> 。</li>
|
<li><strong>补码</strong>:正数的补码与其原码相同,负数的补码是在其反码的基础上加 <span class="arithmatex">\(1\)</span> 。</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>图 3-4 展示了原吗、反码和补码之间的转换方法。</p>
|
<p>图 3-4 展示了原码、反码和补码之间的转换方法。</p>
|
||||||
<p><img alt="原码、反码与补码之间的相互转换" src="../number_encoding.assets/1s_2s_complement.png" /></p>
|
<p><img alt="原码、反码与补码之间的相互转换" src="../number_encoding.assets/1s_2s_complement.png" /></p>
|
||||||
<p align="center"> 图 3-4 原码、反码与补码之间的相互转换 </p>
|
<p align="center"> 图 3-4 原码、反码与补码之间的相互转换 </p>
|
||||||
|
|
||||||
|
@ -3478,7 +3478,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<h1 id="151">15.1 贪心算法<a class="headerlink" href="#151" title="Permanent link">¶</a></h1>
|
<h1 id="151">15.1 贪心算法<a class="headerlink" href="#151" title="Permanent link">¶</a></h1>
|
||||||
<p>贪心算法是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。</p>
|
<p>「贪心算法 greedy algorithm」是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。</p>
|
||||||
<p>贪心算法和动态规划都常用于解决优化问题。它们之间存在一些相似之处,比如都依赖最优子结构性质,但工作原理是不同的。</p>
|
<p>贪心算法和动态规划都常用于解决优化问题。它们之间存在一些相似之处,比如都依赖最优子结构性质,但工作原理是不同的。</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>动态规划会根据之前阶段的所有决策来考虑当前决策,并使用过去子问题的解来构建当前子问题的解。</li>
|
<li>动态规划会根据之前阶段的所有决策来考虑当前决策,并使用过去子问题的解来构建当前子问题的解。</li>
|
||||||
|
@ -3465,7 +3465,7 @@
|
|||||||
<div class="tabbed-set tabbed-alternate" data-tabs="1:7"><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" /><div class="tabbed-labels"><label for="__tabbed_1_1"><1></label><label for="__tabbed_1_2"><2></label><label for="__tabbed_1_3"><3></label><label for="__tabbed_1_4"><4></label><label for="__tabbed_1_5"><5></label><label for="__tabbed_1_6"><6></label><label for="__tabbed_1_7"><7></label></div>
|
<div class="tabbed-set tabbed-alternate" data-tabs="1:7"><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" /><div class="tabbed-labels"><label for="__tabbed_1_1"><1></label><label for="__tabbed_1_2"><2></label><label for="__tabbed_1_3"><3></label><label for="__tabbed_1_4"><4></label><label for="__tabbed_1_5"><5></label><label for="__tabbed_1_6"><6></label><label for="__tabbed_1_7"><7></label></div>
|
||||||
<div class="tabbed-content">
|
<div class="tabbed-content">
|
||||||
<div class="tabbed-block">
|
<div class="tabbed-block">
|
||||||
<p><img alt="binary_search_step1" src="../binary_search.assets/binary_search_step1.png" /></p>
|
<p><img alt="二分查找流程" src="../binary_search.assets/binary_search_step1.png" /></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tabbed-block">
|
<div class="tabbed-block">
|
||||||
<p><img alt="binary_search_step2" src="../binary_search.assets/binary_search_step2.png" /></p>
|
<p><img alt="binary_search_step2" src="../binary_search.assets/binary_search_step2.png" /></p>
|
||||||
@ -3487,7 +3487,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p align="center"> 图 10-2 binary_search_step1 </p>
|
<p align="center"> 图 10-2 二分查找流程 </p>
|
||||||
|
|
||||||
<p>值得注意的是,由于 <span class="arithmatex">\(i\)</span> 和 <span class="arithmatex">\(j\)</span> 都是 <code>int</code> 类型,<strong>因此 <span class="arithmatex">\(i + j\)</span> 可能会超出 <code>int</code> 类型的取值范围</strong>。为了避免大数越界,我们通常采用公式 <span class="arithmatex">\(m = \lfloor {i + (j - i) / 2} \rfloor\)</span> 来计算中点。</p>
|
<p>值得注意的是,由于 <span class="arithmatex">\(i\)</span> 和 <span class="arithmatex">\(j\)</span> 都是 <code>int</code> 类型,<strong>因此 <span class="arithmatex">\(i + j\)</span> 可能会超出 <code>int</code> 类型的取值范围</strong>。为了避免大数越界,我们通常采用公式 <span class="arithmatex">\(m = \lfloor {i + (j - i) / 2} \rfloor\)</span> 来计算中点。</p>
|
||||||
<div class="tabbed-set tabbed-alternate" data-tabs="2:12"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><input id="__tabbed_2_12" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Java</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Python</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">JS</label><label for="__tabbed_2_6">TS</label><label for="__tabbed_2_7">C</label><label for="__tabbed_2_8">C#</label><label for="__tabbed_2_9">Swift</label><label for="__tabbed_2_10">Zig</label><label for="__tabbed_2_11">Dart</label><label for="__tabbed_2_12">Rust</label></div>
|
<div class="tabbed-set tabbed-alternate" data-tabs="2:12"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><input id="__tabbed_2_12" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Java</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Python</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">JS</label><label for="__tabbed_2_6">TS</label><label for="__tabbed_2_7">C</label><label for="__tabbed_2_8">C#</label><label for="__tabbed_2_9">Swift</label><label for="__tabbed_2_10">Zig</label><label for="__tabbed_2_11">Dart</label><label for="__tabbed_2_12">Rust</label></div>
|
||||||
@ -3751,8 +3751,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>时间复杂度为 <span class="arithmatex">\(O(\log n)\)</span> 。每轮缩小一半区间,因此二分循环次数为 <span class="arithmatex">\(\log_2 n\)</span> 。</p>
|
<p><strong>时间复杂度 <span class="arithmatex">\(O(\log n)\)</span></strong> :在二分循环中,区间每轮缩小一半,循环次数为 <span class="arithmatex">\(\log_2 n\)</span> 。</p>
|
||||||
<p>空间复杂度为 <span class="arithmatex">\(O(1)\)</span> 。指针 <span class="arithmatex">\(i\)</span> 和 <span class="arithmatex">\(j\)</span> 使用常数大小空间。</p>
|
<p><strong>空间复杂度 <span class="arithmatex">\(O(1)\)</span></strong> :指针 <span class="arithmatex">\(i\)</span> 和 <span class="arithmatex">\(j\)</span> 使用常数大小空间。</p>
|
||||||
<h2 id="1011">10.1.1 区间表示方法<a class="headerlink" href="#1011" title="Permanent link">¶</a></h2>
|
<h2 id="1011">10.1.1 区间表示方法<a class="headerlink" href="#1011" title="Permanent link">¶</a></h2>
|
||||||
<p>除了上述的双闭区间外,常见的区间表示还有“左闭右开”区间,定义为 <span class="arithmatex">\([0, n)\)</span> ,即左边界包含自身,右边界不包含自身。在该表示下,区间 <span class="arithmatex">\([i, j]\)</span> 在 <span class="arithmatex">\(i = j\)</span> 时为空。</p>
|
<p>除了上述的双闭区间外,常见的区间表示还有“左闭右开”区间,定义为 <span class="arithmatex">\([0, n)\)</span> ,即左边界包含自身,右边界不包含自身。在该表示下,区间 <span class="arithmatex">\([i, j]\)</span> 在 <span class="arithmatex">\(i = j\)</span> 时为空。</p>
|
||||||
<p>我们可以基于该表示实现具有相同功能的二分查找算法。</p>
|
<p>我们可以基于该表示实现具有相同功能的二分查找算法。</p>
|
||||||
|
@ -3659,7 +3659,7 @@
|
|||||||
<h2 id="751-avl">7.5.1 AVL 树常见术语<a class="headerlink" href="#751-avl" title="Permanent link">¶</a></h2>
|
<h2 id="751-avl">7.5.1 AVL 树常见术语<a class="headerlink" href="#751-avl" title="Permanent link">¶</a></h2>
|
||||||
<p>AVL 树既是二叉搜索树也是平衡二叉树,同时满足这两类二叉树的所有性质,因此也被称为「平衡二叉搜索树 balanced binary search tree」。</p>
|
<p>AVL 树既是二叉搜索树也是平衡二叉树,同时满足这两类二叉树的所有性质,因此也被称为「平衡二叉搜索树 balanced binary search tree」。</p>
|
||||||
<h3 id="1">1. 节点高度<a class="headerlink" href="#1" title="Permanent link">¶</a></h3>
|
<h3 id="1">1. 节点高度<a class="headerlink" href="#1" title="Permanent link">¶</a></h3>
|
||||||
<p>在操作 AVL 树时,我们需要获取节点的高度,因此需要为 AVL 树的节点类添加 <code>height</code> 变量。</p>
|
<p>由于 AVL 树的相关操作需要获取节点高度,因此我们需要为节点类添加 <code>height</code> 变量。</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">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JS</label><label for="__tabbed_1_6">TS</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label><label for="__tabbed_1_11">Dart</label><label for="__tabbed_1_12">Rust</label></div>
|
<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">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JS</label><label for="__tabbed_1_6">TS</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label><label for="__tabbed_1_11">Dart</label><label for="__tabbed_1_12">Rust</label></div>
|
||||||
<div class="tabbed-content">
|
<div class="tabbed-content">
|
||||||
<div class="tabbed-block">
|
<div class="tabbed-block">
|
||||||
|
@ -4212,12 +4212,12 @@
|
|||||||
<li>根据待删除节点的子节点数量(三种情况),执行对应的删除节点操作。</li>
|
<li>根据待删除节点的子节点数量(三种情况),执行对应的删除节点操作。</li>
|
||||||
</ol>
|
</ol>
|
||||||
<p>如图 7-19 所示,当待删除节点的度为 <span class="arithmatex">\(0\)</span> 时,表示该节点是叶节点,可以直接删除。</p>
|
<p>如图 7-19 所示,当待删除节点的度为 <span class="arithmatex">\(0\)</span> 时,表示该节点是叶节点,可以直接删除。</p>
|
||||||
<p><img alt="在二叉搜索树中删除节点(度为 0)" src="../binary_search_tree.assets/bst_remove_case1.png" /></p>
|
<p><img alt="在二叉搜索树中删除节点(度为 0 )" src="../binary_search_tree.assets/bst_remove_case1.png" /></p>
|
||||||
<p align="center"> 图 7-19 在二叉搜索树中删除节点(度为 0) </p>
|
<p align="center"> 图 7-19 在二叉搜索树中删除节点(度为 0 ) </p>
|
||||||
|
|
||||||
<p>如图 7-20 所示,当待删除节点的度为 <span class="arithmatex">\(1\)</span> 时,将待删除节点替换为其子节点即可。</p>
|
<p>如图 7-20 所示,当待删除节点的度为 <span class="arithmatex">\(1\)</span> 时,将待删除节点替换为其子节点即可。</p>
|
||||||
<p><img alt="在二叉搜索树中删除节点(度为 1)" src="../binary_search_tree.assets/bst_remove_case2.png" /></p>
|
<p><img alt="在二叉搜索树中删除节点(度为 1 )" src="../binary_search_tree.assets/bst_remove_case2.png" /></p>
|
||||||
<p align="center"> 图 7-20 在二叉搜索树中删除节点(度为 1) </p>
|
<p align="center"> 图 7-20 在二叉搜索树中删除节点(度为 1 ) </p>
|
||||||
|
|
||||||
<p>当待删除节点的度为 <span class="arithmatex">\(2\)</span> 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 <span class="arithmatex">\(<\)</span> 根 <span class="arithmatex">\(<\)</span> 右”的性质,<strong>因此这个节点可以是右子树的最小节点或左子树的最大节点</strong>。</p>
|
<p>当待删除节点的度为 <span class="arithmatex">\(2\)</span> 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 <span class="arithmatex">\(<\)</span> 根 <span class="arithmatex">\(<\)</span> 右”的性质,<strong>因此这个节点可以是右子树的最小节点或左子树的最大节点</strong>。</p>
|
||||||
<p>假设我们选择右子树的最小节点(即中序遍历的下一个节点),则删除操作流程如图 7-21 所示。</p>
|
<p>假设我们选择右子树的最小节点(即中序遍历的下一个节点),则删除操作流程如图 7-21 所示。</p>
|
||||||
@ -4228,7 +4228,7 @@
|
|||||||
<div class="tabbed-set tabbed-alternate" data-tabs="4:4"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1"><1></label><label for="__tabbed_4_2"><2></label><label for="__tabbed_4_3"><3></label><label for="__tabbed_4_4"><4></label></div>
|
<div class="tabbed-set tabbed-alternate" data-tabs="4:4"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><input id="__tabbed_4_4" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1"><1></label><label for="__tabbed_4_2"><2></label><label for="__tabbed_4_3"><3></label><label for="__tabbed_4_4"><4></label></div>
|
||||||
<div class="tabbed-content">
|
<div class="tabbed-content">
|
||||||
<div class="tabbed-block">
|
<div class="tabbed-block">
|
||||||
<p><img alt="二叉搜索树删除节点示例" src="../binary_search_tree.assets/bst_remove_case3_step1.png" /></p>
|
<p><img alt="在二叉搜索树中删除节点(度为 2 )" src="../binary_search_tree.assets/bst_remove_case3_step1.png" /></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tabbed-block">
|
<div class="tabbed-block">
|
||||||
<p><img alt="bst_remove_case3_step2" src="../binary_search_tree.assets/bst_remove_case3_step2.png" /></p>
|
<p><img alt="bst_remove_case3_step2" src="../binary_search_tree.assets/bst_remove_case3_step2.png" /></p>
|
||||||
@ -4241,7 +4241,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p align="center"> 图 7-21 二叉搜索树删除节点示例 </p>
|
<p align="center"> 图 7-21 在二叉搜索树中删除节点(度为 2 ) </p>
|
||||||
|
|
||||||
<p>删除节点操作同样使用 <span class="arithmatex">\(O(\log n)\)</span> 时间,其中查找待删除节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间,获取中序遍历后继节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间。</p>
|
<p>删除节点操作同样使用 <span class="arithmatex">\(O(\log n)\)</span> 时间,其中查找待删除节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间,获取中序遍历后继节点需要 <span class="arithmatex">\(O(\log n)\)</span> 时间。</p>
|
||||||
<div class="tabbed-set tabbed-alternate" data-tabs="5:11"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><input id="__tabbed_5_4" name="__tabbed_5" type="radio" /><input id="__tabbed_5_5" name="__tabbed_5" type="radio" /><input id="__tabbed_5_6" name="__tabbed_5" type="radio" /><input id="__tabbed_5_7" name="__tabbed_5" type="radio" /><input id="__tabbed_5_8" name="__tabbed_5" type="radio" /><input id="__tabbed_5_9" name="__tabbed_5" type="radio" /><input id="__tabbed_5_10" name="__tabbed_5" type="radio" /><input id="__tabbed_5_11" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Java</label><label for="__tabbed_5_2">C++</label><label for="__tabbed_5_3">Python</label><label for="__tabbed_5_4">Go</label><label for="__tabbed_5_5">JS</label><label for="__tabbed_5_6">TS</label><label for="__tabbed_5_7">C</label><label for="__tabbed_5_8">C#</label><label for="__tabbed_5_9">Swift</label><label for="__tabbed_5_10">Zig</label><label for="__tabbed_5_11">Dart</label></div>
|
<div class="tabbed-set tabbed-alternate" data-tabs="5:11"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><input id="__tabbed_5_4" name="__tabbed_5" type="radio" /><input id="__tabbed_5_5" name="__tabbed_5" type="radio" /><input id="__tabbed_5_6" name="__tabbed_5" type="radio" /><input id="__tabbed_5_7" name="__tabbed_5" type="radio" /><input id="__tabbed_5_8" name="__tabbed_5" type="radio" /><input id="__tabbed_5_9" name="__tabbed_5" type="radio" /><input id="__tabbed_5_10" name="__tabbed_5" type="radio" /><input id="__tabbed_5_11" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Java</label><label for="__tabbed_5_2">C++</label><label for="__tabbed_5_3">Python</label><label for="__tabbed_5_4">Go</label><label for="__tabbed_5_5">JS</label><label for="__tabbed_5_6">TS</label><label for="__tabbed_5_7">C</label><label for="__tabbed_5_8">C#</label><label for="__tabbed_5_9">Swift</label><label for="__tabbed_5_10">Zig</label><label for="__tabbed_5_11">Dart</label></div>
|
||||||
|
File diff suppressed because one or more lines are too long
BIN
sitemap.xml.gz
BIN
sitemap.xml.gz
Binary file not shown.
Reference in New Issue
Block a user