mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-24 09:56:29 +08:00
Add new Q&As.
This commit is contained in:
parent
7f8b0fff54
commit
1113d03a8f
3 changed files with 15 additions and 9 deletions
|
@ -69,3 +69,9 @@
|
|||
!!! question "“列表的出现大大提升了数组的实用性,但副作用是会造成部分内存空间浪费”,这里的空间浪费是指额外增加的变量如容量、长度、扩容倍数所占的内存吗?"
|
||||
|
||||
这里的空间浪费主要有两方面含义:一方面,列表都会设定一个初始长度,我们不一定需要用这么多。另一方面,为了防止频繁扩容,扩容一般都会乘以一个系数,比如 $\times 1.5$ 。这样一来,也会出现很多空位,我们通常不能完全填满它们。
|
||||
|
||||
!!! question "在 Python 中初始化 `n = [1, 2, 3]` 后,这 3 个元素的地址是相连的,但是初始化 `m = [2, 1, 3]` 会发现它们每个元素的 id 并不是连续的,而是分别跟 `n` 中的相同。这些元素地址不连续,那么 `m` 还是数组吗?"
|
||||
|
||||
假如把列表元素换成链表节点 `n = [n1, n2, n3, n4, n5]` ,通常情况下这五个节点对象也是被分散存储在内存各处的。然而,给定一个列表索引,我们仍然可以在 $O(1)$ 时间内获取到节点内存地址,从而访问到对应的节点。这是因为数组中存储的是节点的引用,而非节点本身。
|
||||
|
||||
与许多语言不同的是,在 Python 中数字也被包装为对象,列表中存储的不是数字本身,而是对数字的引用。因此,我们会发现两个数组中的相同数字拥有同一个 id ,并且这些数字的内存地址是无需连续的。
|
||||
|
|
|
@ -516,18 +516,14 @@ index = hash(key) % capacity
|
|||
|
||||
```swift title="array_hash_map.swift"
|
||||
/* 键值对 */
|
||||
public class Pair: Equatable {
|
||||
public var key: Int
|
||||
public var val: String
|
||||
|
||||
public init(key: Int, val: String) {
|
||||
class Pair {
|
||||
var key: Int
|
||||
var val: String
|
||||
|
||||
init(key: Int, val: String) {
|
||||
self.key = key
|
||||
self.val = val
|
||||
}
|
||||
|
||||
public static func == (lhs: Pair, rhs: Pair) -> Bool {
|
||||
lhs.key == rhs.key && lhs.val == rhs.val
|
||||
}
|
||||
}
|
||||
|
||||
[class]{ArrayHashMap}-[func]{}
|
||||
|
|
|
@ -33,3 +33,7 @@
|
|||
!!! question "在 C++ 中,函数被划分到 `private` 和 `public` 中,这方面有什么考量吗?为什么要将 `height()` 函数和 `updateHeight()` 函数分别放在 `public` 和 `private` 中呢?"
|
||||
|
||||
主要看方法的使用范围,如果方法只在类内部使用,那么就设计为 `private` 。例如,用户单独调用 `updateHeight()` 是没有意义的,它只是插入、删除操作中的一步。而 `height()` 是访问结点高度,类似于 `vector.size()` ,因此设置成 `public` 以便使用。
|
||||
|
||||
!!! question "请问如何从一组输入数据构建一个二叉搜索树?根节点的选择是不是很重要?"
|
||||
|
||||
是的,构建树的方法是 `build_tree()` ,已在源代码中给出。至于根节点的选择,我们通常会将输入数据排序,然后用中点元素作为根节点,再递归地构建左右子树。这样做可以最大程度保证树的平衡性。
|
||||
|
|
Loading…
Reference in a new issue