Hello 算法 1.1.0 Java版为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 专业术语会使用黑体(纸质版和 PDF 版)或添加下划线(网页版),例如数组(array)。建议记住它们, 以便阅读文献。 ‧ 重点内容和总结性语句会 加粗,这类文字值得特别关注。 ‧ 有特指含义的词句会使用“引号”标注,以避免歧义。 ‧ 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 复杂度分析 hello‑algo.com 22 图 2‑2 嵌套循环的流程框图 在这种情况下,函数的操作数量与 ?2 成正比,或者说算法运行时间和输入数据大小 ? 成“平方关系”。 我们可以继续添加嵌套循环,每一次嵌套都是一次“升维”,将会使时间复杂度提高至“立方关系”“四次方 关系”,以此类推。 2.2.2 递归 递归(recursion)是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 复杂度分析 hello‑algo.com 22 图 2‑2 嵌套循环的流程框图 在这种情况下,函数的操作数量与 ?2 成正比,或者说算法运行时间和输入数据大小 ? 成“平方关系”。 我们可以继续添加嵌套循环,每一次嵌套都是一次“升维”,将会使时间复杂度提高至“立方关系”“四次方 关系”,以此类推。 2.2.2 递归 「递归 recursion」是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。 Q:基于数组实现的数据结构也称“静态数据结构”是否有歧义?栈也可以进行出栈和入栈等操作,这些操 作都是“动态”的。 栈确实可以实现动态的数据操作,但数据结构仍然是“静态”(长度不可变)的。尽管基于数组的数据结构可 以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 专业术语会使用黑体(纸质版和 PDF 版)或添加下划线(网页版),例如数组(array)。建议记住它们, 以便阅读文献。 ‧ 重点内容和总结性语句会 加粗,这类文字值得特别关注。 ‧ 有特指含义的词句会使用“引号”标注,以避免歧义。 ‧ com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 复杂度分析 www.hello‑algo.com 22 图 2‑2 嵌套循环的流程框图 在这种情况下,函数的操作数量与 ?2 成正比,或者说算法运行时间和输入数据大小 ? 成“平方关系”。 我们可以继续添加嵌套循环,每一次嵌套都是一次“升维”,将会使时间复杂度提高至“立方关系”“四次方 关系”,以此类推。 2.2.2 递归 递归(recursion)是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b1 Java版空间占用尽可能小,节省计算机内存。 ‧ 数据操作尽量快,包括数据访问、添加、删除、更新等。 1. 引言 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构的设计是一个充满权衡的过程,这意味着如果获得某方面的优势,则往往需要在另一方面做出妥协。 例如,链表相对于数组,数据添加删除操作更加方便,但牺牲了数据的访问速度;图相对于链表,提供了更多 的逻辑信息,但需要占用更多的内存空间。 为数组元素、value 为元素索引。循环遍历数组中的每个元素 num ,并执行: 1. 判断数字 target - num 是否在哈希表中,若是则直接返回该两个元素的索引; 2. 将元素 num 和其索引添加进哈希表; // === File: leetcode_two_sum.java === /* 方法二:辅助哈希表 */ int[] twoSumHashTable(int[] nums, int char[] characters = new char[5]; boolean[] booleans = new boolean[5]; 3.1.2. 计算机内存 在计算机中,内存和硬盘是两种主要的存储硬件设备。「硬盘」主要用于长期存储数据,容量较大(通常可达 到 TB 级别)、速度较慢。「内存」用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。 算法运行中,相关数据都被存储0 码力 | 186 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Java版空间占用尽可能小,节省计算机内存。 ‧ 数据操作尽量快,包括数据访问、添加、删除、更新等。 1. 引言 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构的设计是一个充满权衡的过程,这意味着如果获得某方面的优势,则往往需要在另一方面做出妥协。 例如,链表相对于数组,数据添加删除操作更加方便,但牺牲了数据的访问速度;图相对于链表,提供了更多 的逻辑信息,但需要占用更多的内存空间。 为数组元素、value 为元素索引。循环遍历数组中的每个元素 num ,并执行: 1. 判断数字 target - num 是否在哈希表中,若是则直接返回该两个元素的索引; 2. 将元素 num 和其索引添加进哈希表; // === File: leetcode_two_sum.java === /* 方法二:辅助哈希表 */ int[] twoSumHashTable(int[] nums, int char[] characters = new char[5]; boolean[] booleans = new boolean[5]; 3.1.2. 计算机内存 在计算机中,内存和硬盘是两种主要的存储硬件设备。「硬盘」主要用于长期存储数据,容量较大(通常可达 到 TB 级别)、速度较慢。「内存」用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。 算法运行中,相关数据都被存储0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b4 Java版空间占用尽量减少,节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 1. 初识算法 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。 数据结构设计是一个充满权衡的过程,这意味着要在某方面取得优势,往往需要在另一方面作出妥协。例如, 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度;图相较于链表,提供了更丰 树形结构:树、堆、哈希表,元素存在一对多的关系。 ‧ 网状结构:图,元素存在多对多的关系。 3. 数据结构 hello‑algo.com 38 3.1.2. 物理结构:连续与离散 在计算机中,内存和硬盘是两种主要的存储硬件设备。硬盘主要用于长期存储数据,容量较大(通常可达到 TB 级别)、速度较慢。内存用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。 在算法运行过程中,相关数据都存储在内存 数组长度的选 择变得困难。若长度过小,需要在持续添加数据时频繁扩容数组;若长度过大,则会造成内存空间的浪费。 为解决此问题,出现了一种被称为「动态数组 Dynamic Array」的数据结构,即长度可变的数组,也常被称 为「列表 List」。列表基于数组实现,继承了数组的优点,并且可以在程序运行过程中动态扩容。在列表中, 我们可以自由添加元素,而无需担心超过容量限制。 4.3.1. 列表常用操作0 码力 | 342 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b5 Java版初识算法 hello‑algo.com 13 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。 数据结构设计是一个充满权衡的过程。如果想要在某方面取得提升,往往需要在另一方面作出妥协。下面举 两个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 复杂度分析 hello‑algo.com 21 图 2‑2 嵌套循环的流程框图 在这种情况下,函数的操作数量与 ?2 成正比,或者说算法运行时间和输入数据大小 ? 成“平方关系”。 我们可以继续添加嵌套循环,每一次嵌套都是一次“升维”,将会使时间复杂度提高至“立方关系”、“四次方 关系”、以此类推。 2.2.2 递归 「递归 recursion」是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。 是一对一的顺序关系。 ‧ 树形结构:树、堆、哈希表,元素之间是一对多的关系。 ‧ 网状结构:图,元素之间是多对多的关系。 3.1.2 物理结构:连续与离散 在计算机中,内存和硬盘是两种主要的存储硬件设备。硬盘主要用于长期存储数据,容量较大(通常可达到 TB 级别)、速度较慢。内存用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。 第 3 章 数据结构 hello‑algo0 码力 | 376 页 | 30.69 MB | 1 年前3
Nacos架构&原理
⼀些基础的组件例如数据库、缓存等,这些往往 不能上报心跳,这种类型的服务在注册时,就需要作为持久化实例注册。而上层的业务服务,例如 微服务或者 Dubbo 服务,服务的 Provider 端支持添加汇报心跳的逻辑,此时就可以使用动态服 务的注册方式。 Nacos 2.0 中继续沿用了持久化及非持久化的设定,但是有了⼀些调整。Nacos 1.0 中持久化及非 持久化的属性是作为实例的⼀个元 CoreDNS。CoreDNS 整体架构就是通过插件来串联起来的,通过将插件代码 以约定的方式放到 CoreDNS 工程下,重新构建就可以将插件添加到 CoreDNS 整体功能链路的⼀ 环中。 79 > Nacos 架构 那么这样的扩展性是否是有必要的呢?举⼀个上文提到过的例子,假如要添加⼀种新的健康检查方 式,连接数据库执行⼀条 MySQL 命令,通常的方式是在代码里增加 MySQL 类型的健康检查方法、 back.xml --server.max-http-header-size= 524288 nacos.nacos # Nacos1.4.1 的 application.properties 添加下列参数 server.tomcat.max-http-post-size=-1 server.tomcat.max-connections=20000 125 > Nacos 性能报告 server0 码力 | 326 页 | 12.83 MB | 10 月前3
《Java 应用与开发》课程讲义 - 王晓东属性名”方式直接访问时,使用的是子类中添加的属性 age; 2. 调用子类添加或者重写的方法时,方法中使用的是子类定义的属性 age; 3. 调用父类中定义的方法时,方法中使用的是父类中的属性 age; 4. 可以理解为“层次优先 就�原则”,在哪个层次中的代码,就优先使用该层次类 中定义的属性。不提倡使用同名属性。 4.4.3 关键字 super 在存在命名冲突(子类中存在方法重写或添加同名属性)的情况下,子类中的代 4 p[2] = new Graduate(); //假设 Graduate 类继承了 Student 类 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,该变量则 不能再访问子类中添加的属性和方法,这体现了父类引用对子类对象的能力屏蔽性。 1 Student m = new Student(); 2 m.setSchool(”ouc”); // 合法 . . . . . . 子类类型的数据,即不必为相关的每种类型单独 声明一个处理方法,提高了代码的通用性。 5.1.3 虚方法调用 思考:一个引用类型的变量如果声明为父类的类型,但实际引用的是子类对象, 则该变量就不能再访问子类中添加的属性和方法。但如果此时调用的是父类中声明过、 且在子类中重写过的方法,情况如何? 补充代码。 5.1.4 对象造型 引用类型数据值之间的强制类型转换称为造型(Casting)。造型以下几种情况需0 码力 | 330 页 | 6.54 MB | 1 年前3
Java 应用与开发 - Java 内存模型与分配机制这个类型用到的常量的一个有序集合。包括直接常量 (基本类型、String)和对其他类型、方法、字段的符号 引用。池中的数据和数组一样通过索引访问,常量池在 Java 程序的动态链接中起了核心作用。(Perm) 代码段 存放从硬盘上读取的源程序代码。(Perm) 数据段 存放 static 定义的静态成员。(Perm) 1注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因 为同一个类的对象拥有各自的成员变量,存储在各自的堆内存中,但是他们共 这个类型用到的常量的一个有序集合。包括直接常量 (基本类型、String)和对其他类型、方法、字段的符号 引用。池中的数据和数组一样通过索引访问,常量池在 Java 程序的动态链接中起了核心作用。(Perm) 代码段 存放从硬盘上读取的源程序代码。(Perm) 数据段 存放 static 定义的静态成员。(Perm) 1注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因 为同一个类的对象拥有各自的成员变量,存储在各自的堆内存中,但是他们共 这个类型用到的常量的一个有序集合。包括直接常量 (基本类型、String)和对其他类型、方法、字段的符号 引用。池中的数据和数组一样通过索引访问,常量池在 Java 程序的动态链接中起了核心作用。(Perm) 代码段 存放从硬盘上读取的源程序代码。(Perm) 数据段 存放 static 定义的静态成员。(Perm) 1注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因 为同一个类的对象拥有各自的成员变量,存储在各自的堆内存中,但是他们共0 码力 | 44 页 | 818.30 KB | 1 年前3
共 25 条
- 1
- 2
- 3













