From c9ec4c2625985e43cedb5ec0d929ae9abfe78bb8 Mon Sep 17 00:00:00 2001 From: krahets Date: Sat, 29 Jul 2023 02:09:55 +0800 Subject: [PATCH] Fix greedy_algorithm.md Add a new Q&A --- docs/chapter_greedy/greedy_algorithm.md | 4 ++-- docs/chapter_tree/summary.md | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/chapter_greedy/greedy_algorithm.md b/docs/chapter_greedy/greedy_algorithm.md index be7ed286c..dbd595757 100644 --- a/docs/chapter_greedy/greedy_algorithm.md +++ b/docs/chapter_greedy/greedy_algorithm.md @@ -97,9 +97,9 @@ 然而,**对于某些硬币面值组合,贪心算法并不能找到最优解**。我们来看几个例子: -- **正例 $coins = [1, 5, 10, 20, 50, 100]$**:在该硬币组合下,给定任意 $amt$ ,贪心算法都可以找出最优解。 +- **正例 $coins = [1, 5, 10, 20, 50, 100]$**:在该硬币组合下,给定任意 $amt$ ,贪心算法都可以找出最优解。 - **反例 $coins = [1, 20, 50]$**:假设 $amt = 60$ ,贪心算法只能找到 $50 + 1 \times 10$ 的兑换组合,共计 $11$ 枚硬币,但动态规划可以找到最优解 $20 + 20 + 20$ ,仅需 $3$ 枚硬币。 -- **反例 $coins = [1, 49, 50]$**:假设 $amt = 98$ ,贪心算法只能找到 $50 + 1 \times 48$ 的兑换组合,共计 $48$ 枚硬币,但动态规划可以找到最优解 $49 + 49$ ,仅需 $2$ 枚硬币。 +- **反例 $coins = [1, 49, 50]$**:假设 $amt = 98$ ,贪心算法只能找到 $50 + 1 \times 48$ 的兑换组合,共计 $49$ 枚硬币,但动态规划可以找到最优解 $49 + 49$ ,仅需 $2$ 枚硬币。 ![贪心无法找出最优解的示例](greedy_algorithm.assets/coin_change_greedy_vs_dp.png) diff --git a/docs/chapter_tree/summary.md b/docs/chapter_tree/summary.md index b6bc20f97..1bec76261 100644 --- a/docs/chapter_tree/summary.md +++ b/docs/chapter_tree/summary.md @@ -36,4 +36,13 @@ !!! question "请问如何从一组输入数据构建一个二叉搜索树?根节点的选择是不是很重要?" - 是的,构建树的方法是 `build_tree()` ,已在源代码中给出。至于根节点的选择,我们通常会将输入数据排序,然后用中点元素作为根节点,再递归地构建左右子树。这样做可以最大程度保证树的平衡性。 + 是的,构建树的方法已在二叉搜索树代码中的 `build_tree()` 方法中给出。至于根节点的选择,我们通常会将输入数据排序,然后用中点元素作为根节点,再递归地构建左右子树。这样做可以最大程度保证树的平衡性。 + +!!! question "在 Java 中,字符串对比是否一定要用 `equals()` 方法?" + + 在 Java 中,对于基本数据类型,`==` 用于对比两个变量的值是否相等。对于引用类型,两种符号的工作原理不同: + + - `==` :用来比较两个变量是否指向同一个对象,即它们在内存中的位置是否相同。 + - `equals()`:用来对比两个对象的值是否相等。 + + 因此如果要对比值,我们通常会用 `equals()` 。然而,通过 `String a = "hi"; String b = "hi";` 初始化的字符串都存储在字符串常量池中,它们指向同一个对象,因此也可以用 `a == b` 来比较两个字符串的内容。