Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve the consistency between code and comments in Kotlin #1268

Merged
merged 21 commits into from
Apr 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion codes/c/chapter_heap/my_heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ int right(MaxHeap *maxHeap, int i) {

/* 获取父节点的索引 */
int parent(MaxHeap *maxHeap, int i) {
return (i - 1) / 2;
return (i - 1) / 2; // 向下取整
}

/* 交换元素 */
Expand Down
5 changes: 3 additions & 2 deletions codes/kotlin/chapter_array_and_linkedlist/linked_list.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ fun insert(n0: ListNode?, p: ListNode?) {
fun remove(n0: ListNode?) {
if (n0?.next == null)
return
// n0 -> P -> n1
val p = n0.next
val n1 = p?.next
n0.next = n1
Expand Down Expand Up @@ -78,10 +79,10 @@ fun main() {
printLinkedList(n0)

/* 访问节点 */
val node: ListNode = access(n0, 3)!!
val node = access(n0, 3)!!
println("链表中索引 3 处的节点的值 = ${node._val}")

/* 查找节点 */
val index: Int = find(n0, 2)
val index = find(n0, 2)
println("链表中值为 2 的节点的索引 = $index")
}
1 change: 1 addition & 0 deletions codes/kotlin/chapter_computational_complexity/recursion.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ fun forLoopRecur(n: Int): Int {
var res = 0
// 递: 递归调用
for (i in n downTo 0) {
// 通过“入栈操作”模拟“递”
stack.push(i)
}
// 归: 返回结果
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ fun constant(n: Int): Int {
/* 线性阶 */
fun linear(n: Int): Int {
var count = 0
// 循环次数与数组长度成正比
for (i in 0..<n)
count++
return count
Expand Down Expand Up @@ -55,7 +54,9 @@ fun bubbleSort(nums: IntArray): Int {
for (j in 0..<i) {
if (nums[j] > nums[j + 1]) {
// 交换 nums[j] 与 nums[j + 1]
nums[j] = nums[j + 1].also { nums[j + 1] = nums[j] }
val temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp
count += 3 // 元素交换包含 3 个单元操作
}
}
Expand All @@ -66,8 +67,8 @@ fun bubbleSort(nums: IntArray): Int {
/* 指数阶(循环实现) */
fun exponential(n: Int): Int {
var count = 0
// 细胞每轮一分为二,形成数列 1, 2, 4, 8, ..., 2^(n-1)
var base = 1
// 细胞每轮一分为二,形成数列 1, 2, 4, 8, ..., 2^(n-1)
for (i in 0..<n) {
for (j in 0..<base) {
count++
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,11 @@ fun randomNumbers(n: Int): Array<Int?> {
for (i in 0..<n) {
nums[i] = i + 1
}
val mutableList = nums.toMutableList()
// 随机打乱数组元素
mutableList.shuffle()
nums.shuffle()
val res = arrayOfNulls<Int>(n)
for (i in 0..<n) {
res[i] = mutableList[i]
res[i] = nums[i]
}
return res
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ fun climbingStairsDPComp(n: Int): Int {
var a = 1
var b = 2
for (i in 3..n) {
b += a.also { a = b }
val temp = b
b += a
a = temp
}
return b
}
Expand Down
15 changes: 3 additions & 12 deletions codes/kotlin/chapter_dynamic_programming/knapsack.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,7 @@ fun knapsackDFSMem(
}

/* 0-1 背包:动态规划 */
fun knapsackDP(
wgt: IntArray,
_val: IntArray,
cap: Int
): Int {
fun knapsackDP(wgt: IntArray, _val: IntArray, cap: Int): Int {
val n = wgt.size
// 初始化 dp 表
val dp = Array(n + 1) { IntArray(cap + 1) }
Expand All @@ -83,11 +79,7 @@ fun knapsackDP(
}

/* 0-1 背包:空间优化后的动态规划 */
fun knapsackDPComp(
wgt: IntArray,
_val: IntArray,
cap: Int
): Int {
fun knapsackDPComp(wgt: IntArray, _val: IntArray, cap: Int): Int {
val n = wgt.size
// 初始化 dp 表
val dp = IntArray(cap + 1)
Expand All @@ -97,8 +89,7 @@ fun knapsackDPComp(
for (c in cap downTo 1) {
if (wgt[i - 1] <= c) {
// 不选和选物品 i 这两种方案的较大值
dp[c] =
max(dp[c], dp[c - wgt[i - 1]] + _val[i - 1])
dp[c] = max(dp[c], dp[c - wgt[i - 1]] + _val[i - 1])
}
}
}
Expand Down
14 changes: 7 additions & 7 deletions codes/kotlin/chapter_graph/graph_adjacency_list.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ class GraphAdjList(edges: Array<Array<Vertex?>>) {
init {
// 添加所有顶点和边
for (edge in edges) {
addVertex(edge[0]!!);
addVertex(edge[1]!!);
addEdge(edge[0]!!, edge[1]!!);
addVertex(edge[0]!!)
addVertex(edge[1]!!)
addEdge(edge[0]!!, edge[1]!!)
}
}

Expand All @@ -34,16 +34,16 @@ class GraphAdjList(edges: Array<Array<Vertex?>>) {
throw IllegalArgumentException()
// 添加边 vet1 - vet2
adjList[vet1]?.add(vet2)
adjList[vet2]?.add(vet1);
adjList[vet2]?.add(vet1)
}

/* 删除边 */
fun removeEdge(vet1: Vertex, vet2: Vertex) {
if (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)
throw IllegalArgumentException()
// 删除边 vet1 - vet2
adjList[vet1]?.remove(vet2);
adjList[vet2]?.remove(vet1);
adjList[vet1]?.remove(vet2)
adjList[vet2]?.remove(vet1)
}

/* 添加顶点 */
Expand All @@ -59,7 +59,7 @@ class GraphAdjList(edges: Array<Array<Vertex?>>) {
if (!adjList.containsKey(vet))
throw IllegalArgumentException()
// 在邻接表中删除顶点 vet 对应的链表
adjList.remove(vet);
adjList.remove(vet)
// 遍历其他顶点的链表,删除所有包含 vet 的边
for (list in adjList.values) {
list.remove(vet)
Expand Down
12 changes: 6 additions & 6 deletions codes/kotlin/chapter_graph/graph_adjacency_matrix.kt
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ class GraphAdjMat(vertices: IntArray, edges: Array<IntArray>) {
if (i < 0 || j < 0 || i >= size() || j >= size() || i == j)
throw IndexOutOfBoundsException()
// 在无向图中,邻接矩阵关于主对角线对称,即满足 (i, j) == (j, i)
adjMat[i][j] = 1;
adjMat[j][i] = 1;
adjMat[i][j] = 1
adjMat[j][i] = 1
}

/* 删除边 */
Expand All @@ -79,15 +79,15 @@ class GraphAdjMat(vertices: IntArray, edges: Array<IntArray>) {
// 索引越界与相等处理
if (i < 0 || j < 0 || i >= size() || j >= size() || i == j)
throw IndexOutOfBoundsException()
adjMat[i][j] = 0;
adjMat[j][i] = 0;
adjMat[i][j] = 0
adjMat[j][i] = 0
}

/* 打印邻接矩阵 */
fun print() {
print("顶点列表 = ")
println(vertices);
println("邻接矩阵 =");
println(vertices)
println("邻接矩阵 =")
printMatrix(adjMat)
}
}
Expand Down
5 changes: 3 additions & 2 deletions codes/kotlin/chapter_hashing/array_hash_map.kt
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ class ArrayHashMap {
fun valueSet(): MutableList<String> {
val valueSet = mutableListOf<String>()
for (pair in buckets) {
pair?.let { valueSet.add(it._val) }
if (pair != null)
valueSet.add(pair._val)
}
return valueSet
}
Expand All @@ -78,7 +79,7 @@ class ArrayHashMap {
for (kv in pairSet()) {
val key = kv.key
val _val = kv._val
println("${key} -> ${_val}")
println("$key -> $_val")
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion codes/kotlin/chapter_hashing/built_in_hash.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ fun main() {

val arr = arrayOf<Any>(12836, "小哈")
val hashTup = arr.contentHashCode()
println("数组 ${arr.contentToString()} 的哈希值为 ${hashTup}")
println("数组 ${arr.contentToString()} 的哈希值为 $hashTup")

val obj = ListNode(0)
val hashObj = obj.hashCode()
Expand Down
2 changes: 1 addition & 1 deletion codes/kotlin/chapter_hashing/hash_map_chaining.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
package chapter_hashing

/* 链式地址哈希表 */
class HashMapChaining() {
class HashMapChaining {
var size: Int // 键值对数量
var capacity: Int // 哈希表容量
val loadThres: Double // 触发扩容的负载因子阈值
Expand Down
6 changes: 4 additions & 2 deletions codes/kotlin/chapter_hashing/simple_hash.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@

package chapter_hashing

const val MODULUS = 1000000007

/* 加法哈希 */
fun addHash(key: String): Int {
var hash = 0L
val MODULUS = 1000000007
for (c in key.toCharArray()) {
hash = (hash + c.code) % MODULUS
}
Expand All @@ -20,6 +19,7 @@ fun addHash(key: String): Int {
/* 乘法哈希 */
fun mulHash(key: String): Int {
var hash = 0L
val MODULUS = 1000000007
for (c in key.toCharArray()) {
hash = (31 * hash + c.code) % MODULUS
}
Expand All @@ -29,6 +29,7 @@ fun mulHash(key: String): Int {
/* 异或哈希 */
fun xorHash(key: String): Int {
var hash = 0
val MODULUS = 1000000007
for (c in key.toCharArray()) {
hash = hash xor c.code
}
Expand All @@ -38,6 +39,7 @@ fun xorHash(key: String): Int {
/* 旋转哈希 */
fun rotHash(key: String): Int {
var hash = 0L
val MODULUS = 1000000007
for (c in key.toCharArray()) {
hash = ((hash shl 4) xor (hash shr 28) xor c.code.toLong()) % MODULUS
}
Expand Down
4 changes: 3 additions & 1 deletion codes/kotlin/chapter_heap/my_heap.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ class MaxHeap(nums: MutableList<Int>?) {

/* 交换元素 */
private fun swap(i: Int, j: Int) {
maxHeap[i] = maxHeap[j].also { maxHeap[j] = maxHeap[i] }
val temp = maxHeap[i]
maxHeap[i] = maxHeap[j]
maxHeap[j] = temp
}

/* 获取堆大小 */
Expand Down
8 changes: 6 additions & 2 deletions codes/kotlin/chapter_sorting/bubble_sort.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ fun bubbleSort(nums: IntArray) {
for (j in 0..<i) {
if (nums[j] > nums[j + 1]) {
// 交换 nums[j] 与 nums[j + 1]
nums[j] = nums[j + 1].also { nums[j + 1] = nums[j] }
val temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp
}
}
}
Expand All @@ -29,7 +31,9 @@ fun bubbleSortWithFlag(nums: IntArray) {
for (j in 0..<i) {
if (nums[j] > nums[j + 1]) {
// 交换 nums[j] 与 nums[j + 1]
nums[j] = nums[j + 1].also { nums[j] = nums[j + 1] }
val temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp
flag = true // 记录交换元素
}
}
Expand Down
8 changes: 6 additions & 2 deletions codes/kotlin/chapter_sorting/heap_sort.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ fun siftDown(nums: IntArray, n: Int, li: Int) {
if (ma == i)
break
// 交换两节点
nums[i] = nums[ma].also { nums[ma] = nums[i] }
val temp = nums[i]
nums[i] = nums[ma]
nums[ma] = temp
// 循环向下堆化
i = ma
}
Expand All @@ -37,7 +39,9 @@ fun heapSort(nums: IntArray) {
// 从堆中提取最大元素,循环 n-1 轮
for (i in nums.size - 1 downTo 1) {
// 交换根节点与最右叶节点(交换首元素与尾元素)
nums[0] = nums[i].also { nums[i] = nums[0] }
val temp = nums[0]
nums[0] = nums[i]
nums[i] = temp
// 以根节点为起点,从顶至底进行堆化
siftDown(nums, i, 0)
}
Expand Down
4 changes: 3 additions & 1 deletion codes/kotlin/chapter_sorting/quick_sort.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ package chapter_sorting

/* 元素交换 */
fun swap(nums: IntArray, i: Int, j: Int) {
nums[i] = nums[j].also { nums[j] = nums[i] }
val temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
}

/* 哨兵划分 */
Expand Down
4 changes: 3 additions & 1 deletion codes/kotlin/chapter_sorting/selection_sort.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ fun selectionSort(nums: IntArray) {
k = j // 记录最小元素的索引
}
// 将该最小元素与未排序区间的首个元素交换
nums[i] = nums[k].also { nums[k] = nums[i] }
val temp = nums[i]
nums[i] = nums[k]
nums[k] = temp
}
}

Expand Down
2 changes: 1 addition & 1 deletion codes/kotlin/chapter_stack_and_queue/linkedlist_stack.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class LinkedListStack(
fun pop(): Int? {
val num = peek()
stackPeek = stackPeek?.next
stkSize--;
stkSize--
return num
}

Expand Down
3 changes: 1 addition & 2 deletions codes/kotlin/chapter_tree/array_binary_tree.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import utils.TreeNode
import utils.printTree

/* 数组表示下的二叉树类 */
/* 构造方法 */
class ArrayBinaryTree(private val tree: MutableList<Int?>) {
/* 列表容量 */
fun size(): Int {
Expand Down Expand Up @@ -93,7 +92,7 @@ class ArrayBinaryTree(private val tree: MutableList<Int?>) {
/* Driver Code */
fun main() {
// 初始化二叉树
// 这里借助了一个从数组直接生成二叉树的函数
// 这里借助了一个从列表直接生成二叉树的函数
val arr = mutableListOf(1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15)

val root = TreeNode.listToTree(arr)
Expand Down
4 changes: 2 additions & 2 deletions codes/kotlin/chapter_tree/binary_tree_bfs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ fun levelOrder(root: TreeNode?): MutableList<Int> {
val list = mutableListOf<Int>()
while (queue.isNotEmpty()) {
val node = queue.poll() // 队列出队
list.add(node?._val!!) // 保存节点值
list.add(node?._val!!) // 保存节点值
if (node.left != null)
queue.offer(node.left) // 左子节点入队
if (node.right != null)
Expand All @@ -31,7 +31,7 @@ fun levelOrder(root: TreeNode?): MutableList<Int> {
/* Driver Code */
fun main() {
/* 初始化二叉树 */
// 这里借助了一个从数组直接生成二叉树的函数
// 这里借助了一个从列表直接生成二叉树的函数
val root = TreeNode.listToTree(mutableListOf(1, 2, 3, 4, 5, 6, 7))
krahets marked this conversation as resolved.
Show resolved Hide resolved
println("\n初始化二叉树\n")
printTree(root)
Expand Down
Loading