This commit is contained in:
krahets 2023-08-28 23:52:41 +08:00
parent 2f0f154b3c
commit 88a746f493
7 changed files with 21 additions and 21 deletions

View file

@ -10,7 +10,7 @@
然而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。 然而在本开源书中,内容更迭的时间被缩短至数日甚至几个小时。
## 内容微调 ### 内容微调
如下图所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。 如下图所示,每个页面的右上角都有“编辑图标”。您可以按照以下步骤修改文本或代码。
@ -22,7 +22,7 @@
图片无法直接修改,需要通过新建 [Issue](https://github.com/krahets/hello-algo/issues) 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 图片无法直接修改,需要通过新建 [Issue](https://github.com/krahets/hello-algo/issues) 或评论留言来描述问题,我们会尽快重新绘制并替换图片。
## 内容创作 ### 内容创作
如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。 如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。
@ -32,7 +32,7 @@
4. 将本地所做更改 Commit ,然后 Push 至远程仓库。 4. 将本地所做更改 Commit ,然后 Push 至远程仓库。
5. 刷新仓库网页点击“Create pull request”按钮即可发起拉取请求。 5. 刷新仓库网页点击“Create pull request”按钮即可发起拉取请求。
## Docker 部署 ### Docker 部署
执行以下 Docker 脚本,稍等片刻,即可在网页 `http://localhost:8000` 访问本项目。 执行以下 Docker 脚本,稍等片刻,即可在网页 `http://localhost:8000` 访问本项目。

View file

@ -1,55 +1,55 @@
# 编程环境安装 # 编程环境安装
## VSCode ### VSCode
本书推荐使用开源轻量的 VSCode 作为本地 IDE ,下载并安装 [VSCode](https://code.visualstudio.com/) 。 本书推荐使用开源轻量的 VSCode 作为本地 IDE ,下载并安装 [VSCode](https://code.visualstudio.com/) 。
## Java 环境 ### Java 环境
1. 下载并安装 [OpenJDK](https://jdk.java.net/18/)(版本需满足 > JDK 9 1. 下载并安装 [OpenJDK](https://jdk.java.net/18/)(版本需满足 > JDK 9
2. 在 VSCode 的插件市场中搜索 `java` ,安装 Extension Pack for Java 。 2. 在 VSCode 的插件市场中搜索 `java` ,安装 Extension Pack for Java 。
## C/C++ 环境 ### C/C++ 环境
1. Windows 系统需要安装 [MinGW](https://sourceforge.net/projects/mingw-w64/files/)[配置教程](https://blog.csdn.net/qq_33698226/article/details/129031241)MacOS 自带 Clang 无须安装。 1. Windows 系统需要安装 [MinGW](https://sourceforge.net/projects/mingw-w64/files/)[配置教程](https://blog.csdn.net/qq_33698226/article/details/129031241)MacOS 自带 Clang 无须安装。
2. 在 VSCode 的插件市场中搜索 `c++` ,安装 C/C++ Extension Pack 。 2. 在 VSCode 的插件市场中搜索 `c++` ,安装 C/C++ Extension Pack 。
3. (可选)打开 Settings 页面,搜索 `Clang_format_fallback Style` 代码格式化选项,设置为 `{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }` 3. (可选)打开 Settings 页面,搜索 `Clang_format_fallback Style` 代码格式化选项,设置为 `{ BasedOnStyle: Microsoft, BreakBeforeBraces: Attach }`
## Python 环境 ### Python 环境
1. 下载并安装 [Miniconda3](https://docs.conda.io/en/latest/miniconda.html) 。 1. 下载并安装 [Miniconda3](https://docs.conda.io/en/latest/miniconda.html) 。
2. 在 VSCode 的插件市场中搜索 `python` ,安装 Python Extension Pack 。 2. 在 VSCode 的插件市场中搜索 `python` ,安装 Python Extension Pack 。
3. (可选)在命令行输入 `pip install black` ,安装代码格式化工具。 3. (可选)在命令行输入 `pip install black` ,安装代码格式化工具。
## Go 环境 ### Go 环境
1. 下载并安装 [go](https://go.dev/dl/) 。 1. 下载并安装 [go](https://go.dev/dl/) 。
2. 在 VSCode 的插件市场中搜索 `go` ,安装 Go 。 2. 在 VSCode 的插件市场中搜索 `go` ,安装 Go 。
3. 快捷键 `Ctrl + Shift + P` 呼出命令栏,输入 go ,选择 `Go: Install/Update Tools` ,全部勾选并安装即可。 3. 快捷键 `Ctrl + Shift + P` 呼出命令栏,输入 go ,选择 `Go: Install/Update Tools` ,全部勾选并安装即可。
## JavaScript 环境 ### JavaScript 环境
1. 下载并安装 [node.js](https://nodejs.org/en/) 。 1. 下载并安装 [node.js](https://nodejs.org/en/) 。
2. 在 VSCode 的插件市场中搜索 `javascript` ,安装 JavaScript (ES6) code snippets 。 2. 在 VSCode 的插件市场中搜索 `javascript` ,安装 JavaScript (ES6) code snippets 。
3. (可选)在 VSCode 的插件市场中搜索 `Prettier` ,安装代码格式化工具。 3. (可选)在 VSCode 的插件市场中搜索 `Prettier` ,安装代码格式化工具。
## C# 环境 ### C# 环境
1. 下载并安装 [.Net 6.0](https://dotnet.microsoft.com/en-us/download) 。 1. 下载并安装 [.Net 6.0](https://dotnet.microsoft.com/en-us/download) 。
2. 在 VSCode 的插件市场中搜索 `C# Dev Kit` ,安装 C# Dev Kit [配置教程](https://code.visualstudio.com/docs/csharp/get-started))。 2. 在 VSCode 的插件市场中搜索 `C# Dev Kit` ,安装 C# Dev Kit [配置教程](https://code.visualstudio.com/docs/csharp/get-started))。
3. 也可使用 Visual Studio[安装教程](https://learn.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022))。 3. 也可使用 Visual Studio[安装教程](https://learn.microsoft.com/zh-cn/visualstudio/install/install-visual-studio?view=vs-2022))。
## Swift 环境 ### Swift 环境
1. 下载并安装 [Swift](https://www.swift.org/download/)。 1. 下载并安装 [Swift](https://www.swift.org/download/)。
2. 在 VSCode 的插件市场中搜索 `swift` ,安装 [Swift for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang)。 2. 在 VSCode 的插件市场中搜索 `swift` ,安装 [Swift for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang)。
## Dart 环境 ### Dart 环境
1. 下载并安装 [Dart](https://dart.dev/get-dart) 。 1. 下载并安装 [Dart](https://dart.dev/get-dart) 。
2. 在 VSCode 的插件市场中搜索 `dart` ,安装 [Dart](https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code) 。 2. 在 VSCode 的插件市场中搜索 `dart` ,安装 [Dart](https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code) 。
## Rust 环境 ### Rust 环境
1. 下载并安装 [Rust](https://www.rust-lang.org/tools/install)。 1. 下载并安装 [Rust](https://www.rust-lang.org/tools/install)。
2. 在 VSCode 的插件市场中搜索 `rust` ,安装 [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)。 2. 在 VSCode 的插件市场中搜索 `rust` ,安装 [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)。

View file

@ -635,7 +635,7 @@ $T(n)$ 是一次函数,说明其运行时间的增长趋势是线性的,因
1. **忽略 $T(n)$ 中的常数项**。因为它们都与 $n$ 无关,所以对时间复杂度不产生影响。 1. **忽略 $T(n)$ 中的常数项**。因为它们都与 $n$ 无关,所以对时间复杂度不产生影响。
2. **省略所有系数**。例如,循环 $2n$ 次、$5n + 1$ 次等,都可以简化记为 $n$ 次,因为 $n$ 前面的系数对时间复杂度没有影响。 2. **省略所有系数**。例如,循环 $2n$ 次、$5n + 1$ 次等,都可以简化记为 $n$ 次,因为 $n$ 前面的系数对时间复杂度没有影响。
3. **循环嵌套时使用乘法**。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套用第 `1.` 点和第 `2.` 点的技巧。 3. **循环嵌套时使用乘法**。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套用第 `1.` 点和第 `2.` 点的技巧。
给定一个函数,我们可以用上述技巧来统计操作数量。 给定一个函数,我们可以用上述技巧来统计操作数量。

View file

@ -1,6 +1,6 @@
# 贪心算法 # 贪心算法
贪心算法是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。 贪心算法 greedy algorithm」是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期望获得全局最优解。贪心算法简洁且高效,在许多实际问题中都有着广泛的应用。
贪心算法和动态规划都常用于解决优化问题。它们之间存在一些相似之处,比如都依赖最优子结构性质,但工作原理是不同的。 贪心算法和动态规划都常用于解决优化问题。它们之间存在一些相似之处,比如都依赖最优子结构性质,但工作原理是不同的。

View file

@ -115,9 +115,9 @@
[class]{}-[func]{binary_search} [class]{}-[func]{binary_search}
``` ```
时间复杂度为 $O(\log n)$ 。每轮缩小一半区间,因此二分循环次数为 $\log_2 n$ 。 **时间复杂度 $O(\log n)$** :在二分循环中,区间每轮缩小一半,循环次数为 $\log_2 n$ 。
空间复杂度为 $O(1)$ 。指针 $i$ 和 $j$ 使用常数大小空间。 **空间复杂度 $O(1)$** 指针 $i$ 和 $j$ 使用常数大小空间。
## 区间表示方法 ## 区间表示方法

View file

@ -18,7 +18,7 @@ AVL 树既是二叉搜索树也是平衡二叉树,同时满足这两类二叉
### 节点高度 ### 节点高度
在操作 AVL 树时,我们需要获取节点的高度,因此需要为 AVL 树的节点类添加 `height` 变量。 由于 AVL 树的相关操作需要获取节点高度,因此我们需要为节点类添加 `height` 变量。
=== "Java" === "Java"

View file

@ -202,11 +202,11 @@
如下图所示,当待删除节点的度为 $0$ 时,表示该节点是叶节点,可以直接删除。 如下图所示,当待删除节点的度为 $0$ 时,表示该节点是叶节点,可以直接删除。
![在二叉搜索树中删除节点(度为 0](binary_search_tree.assets/bst_remove_case1.png) ![在二叉搜索树中删除节点(度为 0 ](binary_search_tree.assets/bst_remove_case1.png)
如下图所示,当待删除节点的度为 $1$ 时,将待删除节点替换为其子节点即可。 如下图所示,当待删除节点的度为 $1$ 时,将待删除节点替换为其子节点即可。
![在二叉搜索树中删除节点(度为 1](binary_search_tree.assets/bst_remove_case2.png) ![在二叉搜索树中删除节点(度为 1 ](binary_search_tree.assets/bst_remove_case2.png)
当待删除节点的度为 $2$ 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 $<$ 根 $<$ 右”的性质,**因此这个节点可以是右子树的最小节点或左子树的最大节点**。 当待删除节点的度为 $2$ 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 $<$ 根 $<$ 右”的性质,**因此这个节点可以是右子树的最小节点或左子树的最大节点**。
@ -216,7 +216,7 @@
2. 将 `tmp` 的值覆盖待删除节点的值,并在树中递归删除节点 `tmp` 2. 将 `tmp` 的值覆盖待删除节点的值,并在树中递归删除节点 `tmp`
=== "<1>" === "<1>"
![二叉搜索树删除节点示例](binary_search_tree.assets/bst_remove_case3_step1.png) ![在二叉搜索树中删除节点(度为 2 ](binary_search_tree.assets/bst_remove_case3_step1.png)
=== "<2>" === "<2>"
![bst_remove_case3_step2](binary_search_tree.assets/bst_remove_case3_step2.png) ![bst_remove_case3_step2](binary_search_tree.assets/bst_remove_case3_step2.png)