 Hello 算法 1.0.0b5 TypeScript 版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 。 // === File: iteration.ts === /* for 循环 */ function forLoop(n: number): number { let res = 0; // 循环求和 1, 2, ..., n-1, n for (let i = 1; i <= n; i++) { res += i; } return0 码力 | 378 页 | 30.70 MB | 1 年前3 Hello 算法 1.0.0b5 TypeScript 版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 。 // === File: iteration.ts === /* for 循环 */ function forLoop(n: number): number { let res = 0; // 循环求和 1, 2, ..., n-1, n for (let i = 1; i <= n; i++) { res += i; } return0 码力 | 378 页 | 30.70 MB | 1 年前3
 Hello 算法 1.1.0 TypeScript版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.ts === /* for 循环 */ function forLoop(n: number): number { let res = 0; // 循环求和 1, 2, ..., n-1, n for (let i = 1; i <= n; i++) { res += i; } return0 码力 | 383 页 | 18.49 MB | 1 年前3 Hello 算法 1.1.0 TypeScript版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.ts === /* for 循环 */ function forLoop(n: number): number { let res = 0; // 循环求和 1, 2, ..., n-1, n for (let i = 1; i <= n; i++) { res += i; } return0 码力 | 383 页 | 18.49 MB | 1 年前3
 Hello 算法 1.0.0b1 TypeScript 版的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 3. 循环执行步骤 1‑2 ,直到找到拼音首字母为 ? 的页码时终止。 1. 引言 hello‑algo.com 9 Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的 algorithm(n: number): void { var a: number = 2; // 1 ns a = a + 1; // 1 ns a = a * 2; // 10 ns // 循环 n 次 for(let i = 0; i < n; i++) { // 1 ns ,每轮都要执行 i++ 2. 复杂度分析 hello‑algo.com 14 console.log(0); A 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数阶」。 ‧ 算法 B 中的打印操作需要循环 ? 次,算法运行时间随着 ? 增大成线性增长。此算法的时间复杂度被称为 「线性阶」。 ‧ 算法 C 中的打印操作需要循环 1000000 次,但运行时间仍与输入数据大小 ? 无关。因此 C 的时间复杂 度和 A 相同,仍为「常数阶」。 // 算法 A 时间复杂度:常数阶0 码力 | 186 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 TypeScript 版的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 3. 循环执行步骤 1‑2 ,直到找到拼音首字母为 ? 的页码时终止。 1. 引言 hello‑algo.com 9 Figure 1‑1. 查字典步骤 查字典这个小学生的标配技能,实际上就是大名鼎鼎的 algorithm(n: number): void { var a: number = 2; // 1 ns a = a + 1; // 1 ns a = a * 2; // 10 ns // 循环 n 次 for(let i = 0; i < n; i++) { // 1 ns ,每轮都要执行 i++ 2. 复杂度分析 hello‑algo.com 14 console.log(0); A 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数阶」。 ‧ 算法 B 中的打印操作需要循环 ? 次,算法运行时间随着 ? 增大成线性增长。此算法的时间复杂度被称为 「线性阶」。 ‧ 算法 C 中的打印操作需要循环 1000000 次,但运行时间仍与输入数据大小 ? 无关。因此 C 的时间复杂 度和 A 相同,仍为「常数阶」。 // 算法 A 时间复杂度:常数阶0 码力 | 186 页 | 14.71 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 TypeScript 版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.ts === /* for 循环 */ function forLoop(n: number): number { let res = 0; // 循环求和 1, 2, ..., n-1, n for (let i = 1; i <= n; i++) { res += i; } return0 码力 | 383 页 | 18.49 MB | 10 月前3 Hello 算法 1.2.0 简体中文 TypeScript 版1. 将扑克牌划分为“有序”和“无序”两部分,并假设初始状态下最左 1 张扑克牌已经有序。 2. 在无序部分抽出一张扑克牌,插入至有序部分的正确位置;完成后最左 2 张扑克已经有序。 3. 不断循环步骤 2. ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 对应的区间是“左闭右开”的,对应的遍历范围为 ?, ? + 1, … , ? − 1 : // === File: iteration.ts === /* for 循环 */ function forLoop(n: number): number { let res = 0; // 循环求和 1, 2, ..., n-1, n for (let i = 1; i <= n; i++) { res += i; } return0 码力 | 383 页 | 18.49 MB | 10 月前3
 TypeScript Handbook(中文版)
现在代码已经用Browserify和tsify捆绑在一起了,我们可以使用Browserify插件为构 建添加一些特性。 Watchify启动Gulp并保持运行状态,当你保存文件时自动编译。 帮你进入到编 辑-保存-刷新浏览器的循环中。 Babel是个十分灵活的编译器,将ES2015及以上版本的代码转换成ES5和 ES3。 你可以添加大量自定义的TypeScript目前不支持的转换器。 Uglify帮你压缩代码,将花费更少的时间去下载它们。 include 和 exclude 一起)。 extends 的值是包含继承自其它 tsconfig.json 路径的字符串。 首先加载基本文件中的配置,然后由继承配置文件重写。 如果遇到循环,我们报告错误。 继承配置文件中的 files 、 include 和 exclude 会重写基本配置文件中相 应的值。 在配置文件中找到的所有相对路径将相对于它们来源的配置文件来解析。 中未指定的某种类型的默认导入项构建. 编译器会由此推 断存在一个 default 导出项和整个模块自己一致. 此选项在 System 模块默认开启. 允许循环中被引用的 let / const 之前这样会报错, 现在由 TypeScript 1.8 支持. 循环中被函数引用的 let / const 声明现在会被输出为与 let / const 更新语义相符的代码. 例子 let list0 码力 | 557 页 | 7.48 MB | 1 年前3 TypeScript Handbook(中文版)
现在代码已经用Browserify和tsify捆绑在一起了,我们可以使用Browserify插件为构 建添加一些特性。 Watchify启动Gulp并保持运行状态,当你保存文件时自动编译。 帮你进入到编 辑-保存-刷新浏览器的循环中。 Babel是个十分灵活的编译器,将ES2015及以上版本的代码转换成ES5和 ES3。 你可以添加大量自定义的TypeScript目前不支持的转换器。 Uglify帮你压缩代码,将花费更少的时间去下载它们。 include 和 exclude 一起)。 extends 的值是包含继承自其它 tsconfig.json 路径的字符串。 首先加载基本文件中的配置,然后由继承配置文件重写。 如果遇到循环,我们报告错误。 继承配置文件中的 files 、 include 和 exclude 会重写基本配置文件中相 应的值。 在配置文件中找到的所有相对路径将相对于它们来源的配置文件来解析。 中未指定的某种类型的默认导入项构建. 编译器会由此推 断存在一个 default 导出项和整个模块自己一致. 此选项在 System 模块默认开启. 允许循环中被引用的 let / const 之前这样会报错, 现在由 TypeScript 1.8 支持. 循环中被函数引用的 let / const 声明现在会被输出为与 let / const 更新语义相符的代码. 例子 let list0 码力 | 557 页 | 7.48 MB | 1 年前3
 TypeScript 4.0 使用手册
现在代码已经用Browserify和tsify捆绑在一起了,我们可以使用Browserify插件为构建添加一些 特性。 Watchify启动Gulp并保持运行状态,当你保存文件时自动编译。 帮你进入到编辑-保存-刷新 浏览器的循环中。 Babel是个十分灵活的编译器,将ES2015及以上版本的代码转换成ES5和ES3。 你可以添加大量 自定义的TypeScript目前不支持的转换器。 Uglify帮你压缩代码,将花费更少的时间去下载它们。 sum += currentRow[i]; 7. } 8. } 9. 10. return sum; 11. } 这里很容易看出一些问题,里层的 for 循环会覆盖变量 i ,因为所有 i 都引用相同的函数作用 域内的变量。 有经验的开发者们很清楚,这些问题可能在代码审查时漏掉,引发无穷的麻烦。 快速的猜一下下面的代码会返回什么: 1. for setTimeout 的每一个函数表达式实际上都引用了相 同作用域里的同一个 i 。 让我们花点时间思考一下这是为什么。 setTimeout 在若干毫秒后执行一个函数,并且是 在 for 循环结束后。 for 循环结束后, i 的值为 10 。 所以当函数被调用的时候,它会打 印出 10 ! 一个通常的解决方法是使用立即执行的函数表达式(IIFE)来捕获每次迭代时 i 的值: 1. for0 码力 | 683 页 | 6.27 MB | 1 年前3 TypeScript 4.0 使用手册
现在代码已经用Browserify和tsify捆绑在一起了,我们可以使用Browserify插件为构建添加一些 特性。 Watchify启动Gulp并保持运行状态,当你保存文件时自动编译。 帮你进入到编辑-保存-刷新 浏览器的循环中。 Babel是个十分灵活的编译器,将ES2015及以上版本的代码转换成ES5和ES3。 你可以添加大量 自定义的TypeScript目前不支持的转换器。 Uglify帮你压缩代码,将花费更少的时间去下载它们。 sum += currentRow[i]; 7. } 8. } 9. 10. return sum; 11. } 这里很容易看出一些问题,里层的 for 循环会覆盖变量 i ,因为所有 i 都引用相同的函数作用 域内的变量。 有经验的开发者们很清楚,这些问题可能在代码审查时漏掉,引发无穷的麻烦。 快速的猜一下下面的代码会返回什么: 1. for setTimeout 的每一个函数表达式实际上都引用了相 同作用域里的同一个 i 。 让我们花点时间思考一下这是为什么。 setTimeout 在若干毫秒后执行一个函数,并且是 在 for 循环结束后。 for 循环结束后, i 的值为 10 。 所以当函数被调用的时候,它会打 印出 10 ! 一个通常的解决方法是使用立即执行的函数表达式(IIFE)来捕获每次迭代时 i 的值: 1. for0 码力 | 683 页 | 6.27 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 TypeScript 版hello‑algo.com 373 English 簡體中文 繁體中文 time complexity 时间复杂度 時間複雜度 space complexity 空间复杂度 空間複雜度 loop 循环 迴圈 iteration 迭代 迭代 recursion 递归 遞迴 tail recursion 尾递归 尾遞迴 recursion tree 递归树 遞迴樹 big‑? notation0 码力 | 384 页 | 18.80 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 TypeScript 版hello‑algo.com 373 English 簡體中文 繁體中文 time complexity 时间复杂度 時間複雜度 space complexity 空间复杂度 空間複雜度 loop 循环 迴圈 iteration 迭代 迭代 recursion 递归 遞迴 tail recursion 尾递归 尾遞迴 recursion tree 递归树 遞迴樹 big‑? notation0 码力 | 384 页 | 18.80 MB | 10 月前3
共 7 条
- 1













