From 7ad324ac0a9d39aae761c884db794af2414640c4 Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Thu, 15 Dec 2022 02:55:52 +0800 Subject: [PATCH 1/6] Update font-family. Tested on macOS, Win10, Ubuntu 20.04. --- docs/stylesheets/extra.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 37eea45d7..bbbfe4417 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -60,5 +60,6 @@ /* font-family setting for Win10 */ body { - --md-code-font-family: var(--md-code-font, _), SFMono-Regular, Consolas, Menlo, Noto Sans SC, monospace; + --md-text-font-family: -apple-system,BlinkMacSystemFont,var(--md-text-font,_),Helvetica,Arial,sans-serif; + --md-code-font-family: var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,-apple-system,BlinkMacSystemFont,var(--md-text-font,_),monospace; } \ No newline at end of file From 3c59eeab0eaddb3b033bb4dd658c52391ff01b8d Mon Sep 17 00:00:00 2001 From: liuxjerry <63865235+liuxjerry@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:53:32 +0800 Subject: [PATCH 2/6] Update intro_to_sort.md --- docs/chapter_sorting/intro_to_sort.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/chapter_sorting/intro_to_sort.md b/docs/chapter_sorting/intro_to_sort.md index f9a9d0fe0..15c2cc6b2 100644 --- a/docs/chapter_sorting/intro_to_sort.md +++ b/docs/chapter_sorting/intro_to_sort.md @@ -22,7 +22,7 @@ comments: true - 「稳定排序」在完成排序后,**不改变** 相等元素在数组中的相对顺序。 - 「非稳定排序」在完成排序后,相等素在数组中的相对位置 **可能被改变**。 -假设我们有一个存储学生信息当表格,第 1, 2 列粉笔是姓名和年龄。那么在以下示例中,「非稳定排序」会导致输入数据的有序性丢失。因此「稳定排序」是很好的特性,**在多级排序中是必须的**。 +假设我们有一个存储学生信息当表格,第 1, 2 列分别是姓名和年龄。那么在以下示例中,「非稳定排序」会导致输入数据的有序性丢失。因此「稳定排序」是很好的特性,**在多级排序中是必须的**。 ```shell # 输入数据是按照姓名排序好的 From 5617f8246f4983500b5b0ffcfd4db43f9f09c313 Mon Sep 17 00:00:00 2001 From: Cathay Date: Thu, 15 Dec 2022 16:41:47 +0800 Subject: [PATCH 3/6] feat(space_complexity): add the Go code to space complexity docs (Chapter of Computational Complexity) --- .../space_complexity.go | 123 ++++++++++++++++ .../space_complexity_test.go | 30 ++++ .../space_complexity.md | 137 +++++++++++++++++- 3 files changed, 283 insertions(+), 7 deletions(-) create mode 100644 codes/go/chapter_computational_complexity/space_complexity.go create mode 100644 codes/go/chapter_computational_complexity/space_complexity_test.go diff --git a/codes/go/chapter_computational_complexity/space_complexity.go b/codes/go/chapter_computational_complexity/space_complexity.go new file mode 100644 index 000000000..77780ae04 --- /dev/null +++ b/codes/go/chapter_computational_complexity/space_complexity.go @@ -0,0 +1,123 @@ +// File: space_complexity.go +// Created Time: 2022-12-15 +// Author: cathay (cathaycchen@gmail.com) + +package chapter_computational_complexity + +import ( + "fmt" + "strconv" +) + +/* Node 结构体 */ +type Node struct { + val int + next *Node +} + +/* TreeNode 二叉树 */ +type TreeNode struct { + val int + left *TreeNode + right *TreeNode +} + +/* 创建 Node 结构体 */ +func newNode(val int) *Node { + return &Node{val: val} +} + +/* 创建 TreeNode 结构体 */ +func newTreeNode(val int) *TreeNode { + return &TreeNode{val: val} +} + +/* 输出二叉树 */ +func printTree(root *TreeNode) { + if root == nil { + return + } + fmt.Println(root.val) + printTree(root.left) + printTree(root.right) +} + +/* 函数(或称方法)*/ +func function() int { + // do something... + return 0 +} + +/* 常数阶 */ +func spaceConstant(n int) { + // 常量、变量、对象占用 O(1) 空间 + const a = 0 + b := 0 + nums := make([]int, 10000) + ListNode := newNode(0) + // 循环中的变量占用 O(1) 空间 + var c int + for i := 0; i < n; i++ { + c = 0 + } + // 循环中的函数占用 O(1) 空间 + for i := 0; i < n; i++ { + function() + } + fmt.Println(a, b, nums, c, ListNode) +} + +/* 线性阶 */ +func spaceLinear(n int) { + // 长度为 n 的数组占用 O(n) 空间 + _ = make([]int, n) + // 长度为 n 的列表占用 O(n) 空间 + var nodes []*Node + for i := 0; i < n; i++ { + nodes = append(nodes, newNode(i)) + } + // 长度为 n 的哈希表占用 O(n) 空间 + m := make(map[int]string, n) + for i := 0; i < n; i++ { + m[i] = strconv.Itoa(i) + } +} + +/* 线性阶(递归实现) */ +func spaceLinearRecur(n int) { + fmt.Println("递归 n =", n) + if n == 1 { + return + } + spaceLinearRecur(n - 1) +} + +/* 平方阶 */ +func spaceQuadratic(n int) { + // 矩阵占用 O(n^2) 空间 + numMatrix := make([][]int, n) + for i := 0; i < n; i++ { + numMatrix[i] = make([]int, n) + } +} + +/* 平方阶(递归实现) */ +func spaceQuadraticRecur(n int) int { + if n <= 0 { + return 0 + } + nums := make([]int, n) + fmt.Printf("递归 n = %d 中的 nums 长度 = %d \n", n, len(nums)) + return spaceQuadraticRecur(n - 1) +} + +/* 指数阶(建立满二叉树) */ +func buildTree(n int) *TreeNode { + if n == 0 { + return nil + } + root := newTreeNode(0) + root.left = buildTree(n - 1) + root.right = buildTree(n - 1) + return root +} diff --git a/codes/go/chapter_computational_complexity/space_complexity_test.go b/codes/go/chapter_computational_complexity/space_complexity_test.go new file mode 100644 index 000000000..9e8237235 --- /dev/null +++ b/codes/go/chapter_computational_complexity/space_complexity_test.go @@ -0,0 +1,30 @@ +// File: space_complexity_test.go +// Created Time: 2022-12-15 +// Author: cathay (cathaycchen@gmail.com) + +package chapter_computational_complexity + +import ( + "testing" +) + +func TestSpaceComplexity(t *testing.T) { + /* ======= Test Case ======= */ + n := 5 + + /* ====== Driver Code ====== */ + // 常数阶 + spaceConstant(n) + + // 线性阶 + spaceLinear(n) + spaceLinearRecur(n) + + // 平方阶 + spaceQuadratic(n) + spaceQuadraticRecur(n) + + // 指数阶 + root := buildTree(n) + printTree(root) +} diff --git a/docs/chapter_computational_complexity/space_complexity.md b/docs/chapter_computational_complexity/space_complexity.md index 95ecb7b4b..de623e22e 100644 --- a/docs/chapter_computational_complexity/space_complexity.md +++ b/docs/chapter_computational_complexity/space_complexity.md @@ -102,7 +102,30 @@ comments: true === "Go" ```go title="" + /* 结构体 */ + type Node struct { + val int + next *Node + } + + /* 创建 Node 结构体 */ + func newNode(val int) *Node { + return &Node{val: val} + } + + /* 函数(或称方法)*/ + func function() int { + // do something... + return 0 + } + func algorithm(n int) int { // 输入数据 + const a = 0 // 暂存数据(常量) + b := 0 // 暂存数据(变量) + newNode(0) // 暂存数据(对象) + c := function() // 栈帧空间(调用函数) + return a + b + c // 输出数据 + } ``` === "JavaScript" @@ -173,7 +196,15 @@ comments: true === "Go" ```go title="" - + func algorithm1(n int) { + a := 0 // O(1) + b := make([]int, 10000) // O(1) + var nums []int + if n > 10 { + nums = make([]int, 10000) // O(n) + } + fmt.Println(a, b, nums) + } ``` === "JavaScript" @@ -263,7 +294,25 @@ comments: true === "Go" ```go title="" - + func function() int { + // do something + return 0 + } + + /* 循环 O(1) */ + func loop(n int) { + for i := 0; i < n; i++ { + function() + } + } + + /* 递归 O(n) */ + func recur(n int) { + if n == 1 { + return + } + recur(n - 1) + } ``` === "JavaScript" @@ -377,7 +426,24 @@ $$ === "Go" ```go title="space_complexity.go" - + /* 常数阶 */ + func spaceConstant(n int) { + // 常量、变量、对象占用 O(1) 空间 + const a = 0 + b := 0 + nums := make([]int, 10000) + ListNode := newNode(0) + // 循环中的变量占用 O(1) 空间 + var c int + for i := 0; i < n; i++ { + c = 0 + } + // 循环中的函数占用 O(1) 空间 + for i := 0; i < n; i++ { + function() + } + fmt.Println(a, b, nums, c, ListNode) + } ``` === "JavaScript" @@ -464,7 +530,21 @@ $$ === "Go" ```go title="space_complexity.go" - + /* 线性阶 */ + func spaceLinear(n int) { + // 长度为 n 的数组占用 O(n) 空间 + _ = make([]int, n) + // 长度为 n 的列表占用 O(n) 空间 + var nodes []*Node + for i := 0; i < n; i++ { + nodes = append(nodes, newNode(i)) + } + // 长度为 n 的哈希表占用 O(n) 空间 + m := make(map[int]string, n) + for i := 0; i < n; i++ { + m[i] = strconv.Itoa(i) + } + } ``` === "JavaScript" @@ -528,7 +608,14 @@ $$ === "Go" ```go title="space_complexity.go" - + /* 线性阶(递归实现) */ + func spaceLinearRecur(n int) { + fmt.Println("递归 n =", n) + if n == 1 { + return + } + spaceLinearRecur(n - 1) + } ``` === "JavaScript" @@ -611,7 +698,14 @@ $$ === "Go" ```go title="space_complexity.go" - + /* 平方阶 */ + func spaceQuadratic(n int) { + // 矩阵占用 O(n^2) 空间 + numMatrix := make([][]int, n) + for i := 0; i < n; i++ { + numMatrix[i] = make([]int, n) + } + } ``` === "JavaScript" @@ -678,7 +772,15 @@ $$ === "Go" ```go title="space_complexity.go" - + /* 平方阶(递归实现) */ + func spaceQuadraticRecur(n int) int { + if n <= 0 { + return 0 + } + nums := make([]int, n) + fmt.Printf("递归 n = %d 中的 nums 长度 = %d \n", n, len(nums)) + return spaceQuadraticRecur(n - 1) + } ``` === "JavaScript" @@ -754,7 +856,28 @@ $$ === "Go" ```go title="space_complexity.go" + /* TreeNode 二叉树 */ + type TreeNode struct { + val int + left *TreeNode + right *TreeNode + } + /* 创建 TreeNode 结构体 */ + func newTreeNode(val int) *TreeNode { + return &TreeNode{val: val} + } + + /* 指数阶(建立满二叉树) */ + func buildTree(n int) *TreeNode { + if n == 0 { + return nil + } + root := newTreeNode(0) + root.left = buildTree(n - 1) + root.right = buildTree(n - 1) + return root + } ``` === "JavaScript" From ae37e902a9b84df6500027076b3af3e2ffec313f Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Thu, 15 Dec 2022 22:38:18 +0800 Subject: [PATCH 4/6] Update space_complexity.md --- .../space_complexity.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/docs/chapter_computational_complexity/space_complexity.md b/docs/chapter_computational_complexity/space_complexity.md index de623e22e..6c876a3e6 100644 --- a/docs/chapter_computational_complexity/space_complexity.md +++ b/docs/chapter_computational_complexity/space_complexity.md @@ -196,7 +196,7 @@ comments: true === "Go" ```go title="" - func algorithm1(n int) { + func algorithm(n int) { a := 0 // O(1) b := make([]int, 10000) // O(1) var nums []int @@ -856,18 +856,6 @@ $$ === "Go" ```go title="space_complexity.go" - /* TreeNode 二叉树 */ - type TreeNode struct { - val int - left *TreeNode - right *TreeNode - } - - /* 创建 TreeNode 结构体 */ - func newTreeNode(val int) *TreeNode { - return &TreeNode{val: val} - } - /* 指数阶(建立满二叉树) */ func buildTree(n int) *TreeNode { if n == 0 { From 7a284b7a09fe13c3627b9e6928c8fa2b3fc91df5 Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Thu, 15 Dec 2022 22:53:22 +0800 Subject: [PATCH 5/6] Update hashmap --- codes/java/chapter_hashing/array_hash_map.java | 2 +- docs/chapter_hashing/hash_map.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/codes/java/chapter_hashing/array_hash_map.java b/codes/java/chapter_hashing/array_hash_map.java index 89082c2f9..6dc26ba16 100644 --- a/codes/java/chapter_hashing/array_hash_map.java +++ b/codes/java/chapter_hashing/array_hash_map.java @@ -52,7 +52,7 @@ class ArrayHashMap { /* 删除操作 */ public void remove(int key) { int index = hashFunc(key); - // 置为空字符,代表删除 + // 置为 null ,代表删除 bucket.set(index, null); } diff --git a/docs/chapter_hashing/hash_map.md b/docs/chapter_hashing/hash_map.md index 793d90323..4dd325a2e 100644 --- a/docs/chapter_hashing/hash_map.md +++ b/docs/chapter_hashing/hash_map.md @@ -233,7 +233,7 @@ $$ /* 删除操作 */ public void remove(int key) { int index = hashFunc(key); - // 置为空字符,代表删除 + // 置为 null,代表删除 bucket.set(index, null); } } From f8cc9c09d871008baafbfa49f97d0ee016d1748a Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Thu, 15 Dec 2022 23:30:53 +0800 Subject: [PATCH 6/6] Update stack in Go --- docs/chapter_stack_and_queue/deque.md | 2 +- docs/chapter_stack_and_queue/queue.md | 2 +- docs/chapter_stack_and_queue/stack.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/chapter_stack_and_queue/deque.md b/docs/chapter_stack_and_queue/deque.md index c764ca68b..ca55f8223 100644 --- a/docs/chapter_stack_and_queue/deque.md +++ b/docs/chapter_stack_and_queue/deque.md @@ -119,7 +119,7 @@ comments: true === "Go" - ```go title="deque.go" + ```go title="deque_test.go" /* 初始化双向队列 */ // 在 Go 中,将 list 作为双向队列使用 deque := list.New() diff --git a/docs/chapter_stack_and_queue/queue.md b/docs/chapter_stack_and_queue/queue.md index c27058519..a13d75906 100644 --- a/docs/chapter_stack_and_queue/queue.md +++ b/docs/chapter_stack_and_queue/queue.md @@ -114,7 +114,7 @@ comments: true === "Go" - ```go title="queue.go" + ```go title="queue_test.go" /* 初始化队列 */ // 在 Go 中,将 list 作为队列来使用 queue := list.New() diff --git a/docs/chapter_stack_and_queue/stack.md b/docs/chapter_stack_and_queue/stack.md index d988bdfe7..d81f8f2b6 100644 --- a/docs/chapter_stack_and_queue/stack.md +++ b/docs/chapter_stack_and_queue/stack.md @@ -114,7 +114,7 @@ comments: true === "Go" - ```go title="stack.go" + ```go title="stack_test.go" /* 初始化栈 */ // 在 Go 中,推荐将 Slice 当作栈来使用 var stack []int