From 17252b53a946ca94b957822b3f5b0b21d08c89d1 Mon Sep 17 00:00:00 2001 From: krahets Date: Tue, 24 Oct 2023 16:19:29 +0800 Subject: [PATCH] Format code and docs. --- .../chapter_dynamic_programming/edit_distance.js | 3 ++- codes/python/chapter_tree/avl_tree.py | 12 ++---------- .../chapter_dynamic_programming/edit_distance.ts | 3 ++- .../build_binary_tree_problem.md | 10 +++++----- docs/chapter_graph/graph.md | 10 +++++----- docs/chapter_heap/heap.md | 14 +++++++------- docs/chapter_introduction/what_is_dsa.md | 2 +- docs/chapter_stack_and_queue/deque.md | 8 ++++---- docs/chapter_stack_and_queue/queue.md | 10 +++++----- docs/chapter_stack_and_queue/stack.md | 10 +++++----- docs/chapter_tree/avl_tree.md | 8 ++++---- 11 files changed, 42 insertions(+), 48 deletions(-) diff --git a/codes/javascript/chapter_dynamic_programming/edit_distance.js b/codes/javascript/chapter_dynamic_programming/edit_distance.js index 5af39b8d1..c7b5bd7a8 100644 --- a/codes/javascript/chapter_dynamic_programming/edit_distance.js +++ b/codes/javascript/chapter_dynamic_programming/edit_distance.js @@ -74,7 +74,8 @@ function editDistanceDP(s, t) { dp[i][j] = dp[i - 1][j - 1]; } else { // 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1 - dp[i][j] = Math.min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1 + dp[i][j] = + Math.min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1; } } } diff --git a/codes/python/chapter_tree/avl_tree.py b/codes/python/chapter_tree/avl_tree.py index 6f477c1ff..9fb3477df 100644 --- a/codes/python/chapter_tree/avl_tree.py +++ b/codes/python/chapter_tree/avl_tree.py @@ -184,16 +184,8 @@ if __name__ == "__main__": # 插入节点 # 请关注插入节点后,AVL 树是如何保持平衡的 - test_insert(avl_tree, 1) - test_insert(avl_tree, 2) - test_insert(avl_tree, 3) - test_insert(avl_tree, 4) - test_insert(avl_tree, 5) - test_insert(avl_tree, 8) - test_insert(avl_tree, 7) - test_insert(avl_tree, 9) - test_insert(avl_tree, 10) - test_insert(avl_tree, 6) + for val in [1, 2, 3, 4, 5, 8, 7, 9, 10, 6]: + test_insert(avl_tree, val) # 插入重复节点 test_insert(avl_tree, 7) diff --git a/codes/typescript/chapter_dynamic_programming/edit_distance.ts b/codes/typescript/chapter_dynamic_programming/edit_distance.ts index a5bdcb2ec..d6fe28935 100644 --- a/codes/typescript/chapter_dynamic_programming/edit_distance.ts +++ b/codes/typescript/chapter_dynamic_programming/edit_distance.ts @@ -82,7 +82,8 @@ function editDistanceDP(s: string, t: string): number { dp[i][j] = dp[i - 1][j - 1]; } else { // 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1 - dp[i][j] = Math.min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1 + dp[i][j] = + Math.min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1; } } } diff --git a/docs/chapter_divide_and_conquer/build_binary_tree_problem.md b/docs/chapter_divide_and_conquer/build_binary_tree_problem.md index 46e8d352d..7a82b2074 100644 --- a/docs/chapter_divide_and_conquer/build_binary_tree_problem.md +++ b/docs/chapter_divide_and_conquer/build_binary_tree_problem.md @@ -2,7 +2,7 @@ !!! question - 给定一个二叉树的前序遍历 `preorder` 和中序遍历 `inorder` ,请从中构建二叉树,返回二叉树的根节点。 + 给定一个二叉树的前序遍历 `preorder` 和中序遍历 `inorder` ,请从中构建二叉树,返回二叉树的根节点。假设二叉树中没有值重复的节点。 ![构建二叉树的示例数据](build_binary_tree_problem.assets/build_tree_example.png) @@ -44,10 +44,10 @@

  根节点和子树在前序和中序遍历中的索引

| | 根节点在 `preorder` 中的索引 | 子树在 `inorder` 中的索引区间 | -| ------ | -------------------------------- | ----------------------------- | -| 当前树 | $i$ | $[l, r]$ | -| 左子树 | $i + 1$ | $[l, m-1]$ | -| 右子树 | $i + 1 + (m - l)$ | $[m+1, r]$ | +| ------ | ---------------------------- | ----------------------------- | +| 当前树 | $i$ | $[l, r]$ | +| 左子树 | $i + 1$ | $[l, m-1]$ | +| 右子树 | $i + 1 + (m - l)$ | $[m+1, r]$ | 请注意,右子树根节点索引中的 $(m-l)$ 的含义是“左子树的节点数量”,建议配合下图理解。 diff --git a/docs/chapter_graph/graph.md b/docs/chapter_graph/graph.md index 4877fd910..f777c2ed8 100644 --- a/docs/chapter_graph/graph.md +++ b/docs/chapter_graph/graph.md @@ -76,8 +76,8 @@ $$

  现实生活中常见的图

-| | 顶点 | 边 | 图计算问题 | -| ------ | ---- | --------------- | ------------ | -| 社交网络 | 用户 | 好友关系 | 潜在好友推荐 | -| 地铁线路 | 站点 | 站点间的连通性 | 最短路线推荐 | -| 太阳系 | 星体 | 星体间的万有引力作用 | 行星轨道计算 | +| | 顶点 | 边 | 图计算问题 | +| -------- | ---- | -------------------- | ------------ | +| 社交网络 | 用户 | 好友关系 | 潜在好友推荐 | +| 地铁线路 | 站点 | 站点间的连通性 | 最短路线推荐 | +| 太阳系 | 星体 | 星体间的万有引力作用 | 行星轨道计算 | diff --git a/docs/chapter_heap/heap.md b/docs/chapter_heap/heap.md index 6bda1e378..641a85ba0 100644 --- a/docs/chapter_heap/heap.md +++ b/docs/chapter_heap/heap.md @@ -23,13 +23,13 @@

  堆的操作效率

-| 方法名 | 描述 | 时间复杂度 | -| --------- | ------------------------------------------ | ----------- | -| push() | 元素入堆 | $O(\log n)$ | -| pop() | 堆顶元素出堆 | $O(\log n)$ | -| peek() | 访问堆顶元素(大 / 小顶堆分别为最大 / 小值) | $O(1)$ | -| size() | 获取堆的元素数量 | $O(1)$ | -| isEmpty() | 判断堆是否为空 | $O(1)$ | +| 方法名 | 描述 | 时间复杂度 | +| --------- | -------------------------------------------- | ----------- | +| push() | 元素入堆 | $O(\log n)$ | +| pop() | 堆顶元素出堆 | $O(\log n)$ | +| peek() | 访问堆顶元素(大 / 小顶堆分别为最大 / 小值) | $O(1)$ | +| size() | 获取堆的元素数量 | $O(1)$ | +| isEmpty() | 判断堆是否为空 | $O(1)$ | 在实际应用中,我们可以直接使用编程语言提供的堆类(或优先队列类)。 diff --git a/docs/chapter_introduction/what_is_dsa.md b/docs/chapter_introduction/what_is_dsa.md index f70e769cd..f14fe98b7 100644 --- a/docs/chapter_introduction/what_is_dsa.md +++ b/docs/chapter_introduction/what_is_dsa.md @@ -39,7 +39,7 @@

  将数据结构与算法类比为积木

-| 数据结构与算法 | 拼装积木 | +| 数据结构与算法 | 拼装积木 | | -------------- | ---------------------------------------- | | 输入数据 | 未拼装的积木 | | 数据结构 | 积木组织形式,包括形状、大小、连接方式等 | diff --git a/docs/chapter_stack_and_queue/deque.md b/docs/chapter_stack_and_queue/deque.md index 82b57f93b..f5be6b757 100644 --- a/docs/chapter_stack_and_queue/deque.md +++ b/docs/chapter_stack_and_queue/deque.md @@ -10,10 +10,10 @@

  双向队列操作效率

-| 方法名 | 描述 | 时间复杂度 | -| ----------- | -------------- | ---------- | -| pushFirst() | 将元素添加至队首 | $O(1)$ | -| pushLast() | 将元素添加至队尾 | $O(1)$ | +| 方法名 | 描述 | 时间复杂度 | +| ----------- | ---------------- | ---------- | +| pushFirst() | 将元素添加至队首 | $O(1)$ | +| pushLast() | 将元素添加至队尾 | $O(1)$ | | popFirst() | 删除队首元素 | $O(1)$ | | popLast() | 删除队尾元素 | $O(1)$ | | peekFirst() | 访问队首元素 | $O(1)$ | diff --git a/docs/chapter_stack_and_queue/queue.md b/docs/chapter_stack_and_queue/queue.md index c763f533f..7be74daf6 100755 --- a/docs/chapter_stack_and_queue/queue.md +++ b/docs/chapter_stack_and_queue/queue.md @@ -12,11 +12,11 @@

  队列操作效率

-| 方法名 | 描述 | 时间复杂度 | -| --------- | -------------------------- | -------- | -| push() | 元素入队,即将元素添加至队尾 | $O(1)$ | -| pop() | 队首元素出队 | $O(1)$ | -| peek() | 访问队首元素 | $O(1)$ | +| 方法名 | 描述 | 时间复杂度 | +| ------ | ---------------------------- | ---------- | +| push() | 元素入队,即将元素添加至队尾 | $O(1)$ | +| pop() | 队首元素出队 | $O(1)$ | +| peek() | 访问队首元素 | $O(1)$ | 我们可以直接使用编程语言中现成的队列类。 diff --git a/docs/chapter_stack_and_queue/stack.md b/docs/chapter_stack_and_queue/stack.md index e730af3d7..2b6619a50 100755 --- a/docs/chapter_stack_and_queue/stack.md +++ b/docs/chapter_stack_and_queue/stack.md @@ -14,11 +14,11 @@

  栈的操作效率

-| 方法 | 描述 | 时间复杂度 | -| --------- | ---------------------- | ---------- | -| push() | 元素入栈(添加至栈顶) | $O(1)$ | -| pop() | 栈顶元素出栈 | $O(1)$ | -| peek() | 访问栈顶元素 | $O(1)$ | +| 方法 | 描述 | 时间复杂度 | +| ------ | ---------------------- | ---------- | +| push() | 元素入栈(添加至栈顶) | $O(1)$ | +| pop() | 栈顶元素出栈 | $O(1)$ | +| peek() | 访问栈顶元素 | $O(1)$ | 通常情况下,我们可以直接使用编程语言内置的栈类。然而,某些语言可能没有专门提供栈类,这时我们可以将该语言的“数组”或“链表”视作栈来使用,并在程序逻辑上忽略与栈无关的操作。 diff --git a/docs/chapter_tree/avl_tree.md b/docs/chapter_tree/avl_tree.md index 0f0567ec1..602f7d9a4 100644 --- a/docs/chapter_tree/avl_tree.md +++ b/docs/chapter_tree/avl_tree.md @@ -295,12 +295,12 @@ AVL 树的特点在于“旋转”操作,它能够在不影响二叉树的中

  四种旋转情况的选择条件

-| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 | -| ---------------- | ---------------- | ---------------- | +| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 | +| ------------------- | ---------------- | ---------------- | | $> 1$ (即左偏树) | $\geq 0$ | 右旋 | | $> 1$ (即左偏树) | $<0$ | 先左旋后右旋 | -| $< -1$ (即右偏树) | $\leq 0$ | 左旋 | -| $< -1$ (即右偏树) | $>0$ | 先右旋后左旋 | +| $< -1$ (即右偏树) | $\leq 0$ | 左旋 | +| $< -1$ (即右偏树) | $>0$ | 先右旋后左旋 | 为了便于使用,我们将旋转操作封装成一个函数。**有了这个函数,我们就能对各种失衡情况进行旋转,使失衡节点重新恢复平衡**。