Hello 算法 1.1.0 Swift版
代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration var i = 1 // 初始化条件变量 // 循环求和 1, 2, ..., n-1, n while i <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while i <= n { res += i // 更新条件变量 i += 1 i *= 2 } return res } 总的来说,for 循环的代码更加紧凑,while 循环更加灵活,两0 码力 | 379 页 | 18.47 MB | 1 年前3Hello 算法 1.2.0 简体中文 Swift 版
代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 2, ..., n-1, n while i <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10,0 码力 | 379 页 | 18.48 MB | 10 月前3Hello 算法 1.0.0b5 Swift版
段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 。 // === File: iteration -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 2, ..., n-1, n while i <= n { res += i i += 1 // 更新条件变量 } return res } 在 while 循环中,由于初始化和更新条件变量的步骤是独立在循环结构之外的,因此它比 for 循环的自由度 更高。 第 2 章 com 20 例如在以下代码中,条件变量 ? 每轮进行了两次更新,这种情况就不太方便用 for 循环实现。 // === File: iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, ...0 码力 | 376 页 | 30.70 MB | 1 年前3Hello 算法 1.0.0 Swift版
段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 2, ..., n-1, n while i <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 hello‑algo hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10,0 码力 | 378 页 | 17.59 MB | 1 年前3Hello 算法 1.0.0b1 Swift版
算法运行中,使用的内存空间主要有以下几种: ‧「输入空间」用于存储算法的输入数据; ‧「暂存空间」用于存储算法运行中的变量、对象、函数上下文等数据; ‧「输出空间」用于存储算法的输出数据; � 通常情况下,空间复杂度统计范围是「暂存空间」+「输出空间」。 暂存空间可分为三个部分: ‧「暂存数据」用于保存算法运行中的各种 常量、变量、对象 等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统每次调用函数都会在栈的顶部创建一个栈帧,函数返 .. return 0 } func algorithm(n: Int) -> Int { // 输入数据 let a = 0 // 暂存数据(常量) var b = 0 // 暂存数据(变量) let node = Node(x: 0) // 暂存数据(对象) let c = function() // 栈帧空间(调用函数) return a + b + c // 输出数据 } 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 需要注意的是,在循环中初始化变量或调用函数而占用的内存,在进入下一循环后就会被释放,即不会累积占 用空间,空间复杂度仍为 ?(1) 。 // === File: space_complexity.swift === /* 常数阶 */ func constant(n: Int) { // 常量、变量、对象占用 O(1) 空间 let a0 码力 | 190 页 | 14.71 MB | 1 年前3Hello 算法 1.0.0b2 Swift版
算法运行中,使用的内存空间主要有以下几种: ‧「输入空间」用于存储算法的输入数据; ‧「暂存空间」用于存储算法运行中的变量、对象、函数上下文等数据; ‧「输出空间」用于存储算法的输出数据; � 通常情况下,空间复杂度统计范围是「暂存空间」+「输出空间」。 暂存空间可分为三个部分: ‧「暂存数据」用于保存算法运行中的各种 常量、变量、对象 等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统每次调用函数都会在栈的顶部创建一个栈帧,函数返 .. return 0 } func algorithm(n: Int) -> Int { // 输入数据 let a = 0 // 暂存数据(常量) var b = 0 // 暂存数据(变量) let node = Node(x: 0) // 暂存数据(对象) let c = function() // 栈帧空间(调用函数) return a + b + c // 输出数据 } 常数阶常见于数量与输入数据大小 ? 无关的常量、变量、对象。 需要注意的是,在循环中初始化变量或调用函数而占用的内存,在进入下一循环后就会被释放,即不会累积占 用空间,空间复杂度仍为 ?(1) 。 // === File: space_complexity.swift === /* 常数阶 */ func constant(n: Int) { // 常量、变量、对象占用 O(1) 空间 let a0 码力 | 199 页 | 15.72 MB | 1 年前3Pop in Swift - 李洁信
} 100+个⼦子类继承了 BaseViewController • 代码 > 1000 ⾏行, 难以维护 • ⾼高耦合, ⽗父类改动牵连所有⼦子类 • ⼦子类⾥里继承了⽆无⽤用的实例变量和⽅方法 • BaseTableViewController呢?复制代码? Solution A • Singleton • Helpers & Static Methods • 拆分了代码,但没有降低耦合 presenter.setLoadingViewHidden(false) } } But… • 有点笨重,实现代码多 • 使⽤用时要管理实例的创建和释放 • 使⽤用时⽤用通过间接变量, 多了⼀一层结构 Protocol Version protocol LoadingPresenter { var loadingView: CustomLoadingView! {0 码力 | 60 页 | 875.09 KB | 1 年前3Hello 算法 1.2.0 繁体中文 Swift 版
algorithm 算法 演算法 data structure 数据结构 資料結構 code 代码 程式碼 file 文件 檔案 function 函数 函式 method 方法 方法 variable 变量 變數 asymptotic complexity analysis 渐近复杂度分析 漸近複雜度分析 第 16 章 附錄 www.hello‑algo.com 368 English 簡體中文0 码力 | 379 页 | 18.79 MB | 10 月前3
共 8 条
- 1