Java 中流式运行整数的中位数2024年9月10日 | 阅读 12 分钟 给定一个整数数组。计算输入数组中到目前为止遍历的元素的中间值。为简单起见,假设没有重复项。 示例 输入 int arr[] = {17, 11, 15, 13, 10, 12, 18, 19, 1, 16, 14, 20}; 输出 {17, 14, 15, 14, 13, 12, 13, 14, 13, 14, 14, 14.5} 解释:我们从左到右开始读取数组。遍历的第一个元素是 17。因此,中位数是 17。因为只遍历了一个元素。之后,遍历了元素 11。现在,此时,我们已经遍历了两个元素 17 和 11。因此,中位数变为 (11 + 17) / 2 = 14。 之后,遍历了元素 15。现在我们总共有 3 个遍历过的元素,17、11 和 15,而奇数个元素的中间值是元素按升序排列时的中间元素。因此,这三个元素的中间值是 {11, 15, 17} => {15}。 现在,元素 13 进入了视野,总共遍历了 4 个元素,而偶数个元素的中间值是排序后两个中间元素的平均值。因此,当前中间值为:{11, 13, 15, 17} => (13 + 15) / 2 = 14。类似地,我们也可以计算其他中间值。 方法:使用插入排序从上面的例子可以看出,为了计算中间值,需要对目前为止遍历过的整数进行排序。因此,我们需要一种排序技术来对元素进行排序。我们将使用插入排序来对元素进行排序。 文件名:RunningIntegerStream.java 输出 Median after reading element 17 is: 17 Median after reading { 11 17 } elements is 14.0 Median after reading { 11 15 17 } elements is 15.0 Median after reading { 11 13 15 17 } elements is 14.0 Median after reading { 10 11 13 15 17 } elements is 13.0 Median after reading { 10 11 12 13 15 17 } elements is 12.5 Median after reading { 10 11 12 13 15 17 18 } elements is 13.0 Median after reading { 10 11 12 13 15 17 18 19 } elements is 14.0 Median after reading { 1 10 11 12 13 15 17 18 19 } elements is 13.0 Median after reading { 1 10 11 12 13 15 16 17 18 19 } elements is 14.0 Median after reading { 1 10 11 12 13 14 15 16 17 18 19 } elements is 14.0 Median after reading { 1 10 11 12 13 14 15 16 17 18 19 20 } elements is 14.5 复杂度分析:程序使用了插入排序技术。因此,程序的 time complexity 为 O(n2)。程序不使用任何数据结构。因此,程序 space complexity 为常数,即 O(1)。 注意:有人可能会争论为什么程序中使用了插入排序技术。也可以使用其他排序技术,例如选择排序、归并排序等。这样做的原因是,在插入排序的任何给定实例中,例如对第 k 个元素进行排序,输入数组的前 k 个元素已排序。插入排序不依赖于即将到来的数据(未来数据)来对当前的数据进行排序。换句话说,插入排序在插入下一个元素时对到目前为止的数据进行排序。这是插入排序的一个重要方面,使得该算法成为一个在线算法。方法:使用 AVL 树使用 AVL 树,可以找到流式整数的中位数。我们将一个接一个地将元素插入 AVL 树,并跟踪 文件名:RunningIntegerStream1.java 输出 Median after reading element 17 is: 17 Median after reading { 17 11 } elements is 14.0 Median after reading { 17 11 15 } elements is 15.0 Median after reading { 17 11 15 13 } elements is 14.0 Median after reading { 17 11 15 13 10 } elements is 13.0 Median after reading { 17 11 15 13 10 12 } elements is 12.5 Median after reading { 17 11 15 13 10 12 18 } elements is 13.0 Median after reading { 17 11 15 13 10 12 18 19 } elements is 14.0 Median after reading { 17 11 15 13 10 12 18 19 1 } elements is 13.0 Median after reading { 17 11 15 13 10 12 18 19 1 16 } elements is 14.0 Median after reading { 17 11 15 13 10 12 18 19 1 16 14 } elements is 14.0 Median after reading { 17 11 15 13 10 12 18 19 1 16 14 20 } elements is 14.5 复杂度分析:在 AVL 树中,插入元素的 time complexity 为 O(log(n))。因此,程序的 overall time complexity 为 O(n x log(n))。程序为 AVL 树的节点分配内存。因此,space complexity 为 O(n),其中 n 是已遍历的流式整数的总数。 方法:使用最小堆和最大堆概念是使用最小堆和最大堆来保存下半部分和上半部分元素的。Java 中的最小堆和最大堆可以通过 PriorityQueue 来实现。解决问题需要以下步骤。 算法步骤 1:创建两个堆:一个用于最大堆,用于在任何给定时间维护下半部分的元素;另一个用于最小堆,用于维护上半部分的元素。 步骤 2:将中位数的值初始化为 0。 步骤 3:对于每个当前读取的元素,将其插入最小堆或最大堆,并根据以下条件计算中位数
文件名:DisplayLeafBST1.java 输出 Median after reading element 17 is: 17 Median after reading { 17 } elements is 14.0 Median after reading { 17 11 } elements is 15.0 Median after reading { 17 11 15 } elements is 14.0 Median after reading { 17 11 15 13 } elements is 13.0 Median after reading { 17 11 15 13 10 } elements is 12.5 Median after reading { 17 11 15 13 10 12 } elements is 13.0 Median after reading { 17 11 15 13 10 12 18 } elements is 14.0 Median after reading { 17 11 15 13 10 12 18 19 } elements is 13.0 Median after reading { 17 11 15 13 10 12 18 19 1 } elements is 14.0 Median after reading { 17 11 15 13 10 12 18 19 1 16 } elements is 14.0 Median after reading { 17 11 15 13 10 12 18 19 1 16 14 } elements is 14.5 复杂度分析:程序的 time complexity 和 space complexity 与上一个程序相同。 下一主题Java 中的箭头运算符 |
Java 是一种多功能且广泛使用的编程语言,以其丰富的库和强大的功能而闻名。其中一项功能是 Icon 接口,它允许开发人员创建对象的动态图形表示。在本节中,我们将深入探讨 Java 中的 Icon 接口,...
5 分钟阅读
在 Web 开发领域,Java Servlets 和 CGI (Common Gateway Interface) 是两种不同的技术,它们服务于一个共同的目的:处理 Web 上的动态内容。然而,它们具有不同的特点,了解它们的区别对于开发人员至关重要。在本节中,我们将...
阅读 3 分钟
编程语言领域存在许多选择,每种都有其独特的优点和缺点。Java 和 Rust 都是经常出现在新闻中的语言。两者都强大且适应性强,但它们具有不同的用例和理念,并且针对...
阅读 4 分钟
? 在 Java 中将对象序列化以便将其保存到文件、通过网络传输或存储在数据库中的过程称为序列化。然后可以使用此字节流重新创建原始对象,并具有所有...
5 分钟阅读
java.util.function 包首次发布于 Java 8,其中包含 LongConsumer 接口,该接口用于在 Java 中进行函数式编程。它是接受单个 long 值参数但不输出任何内容的函数的一个示例。LongConsumer 类型对象...
阅读 3 分钟
如何在 Java 中读取 CSV 文件?CSV 代表逗号分隔值。它是一种简单的文件格式,用于以简单的文本形式存储表格数据,例如电子表格或数据库。CSV 格式的文件可以导入到...
7 分钟阅读
在给定范围内查找不重复数字的总数的问题涉及识别每个数字仅出现一次的数字。它有助于分析数字属性,并经常用于组合学。这个概念对于解决与数字唯一性相关的求解问题很有用...
阅读 12 分钟
排列可以定义为,将给定集合的所有成员排列成序列的过程。排列系数用 P(n, r) 表示。它给出从 n 个元素中取 r 个元素的排列数。因此,如果我们有...
阅读 8 分钟
? 在 Java 中,从方法返回二维数组在处理复杂数据结构或执行各种数据操作任务时可能是一项有用的操作。在本节中,我们将深入探讨如何在 Java 中返回二维数组的详细信息,并提供分步……
阅读 6 分钟
在 Java 中,String.valueOf() 方法是一个重载的静态方法,它有助于将各种数据类型(包括对象、布尔值、浮点数、双精度数、长整型和整数)转换为它们的字符串表示形式。它使得字符串操作、日志记录和有效显示数据变得容易。重载...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India