Java 中未排序数组中的第 K 小元素2024年9月10日 | 阅读13分钟 在给定的数组中,任务是找到数组的第 k 小的元素,其中 k 总是小于给定数组的大小。 示例 输入 arr[] = {56, 34, 7, 9, 0, 48, 41, 8} k = 3 输出: 数组的第 3 小的元素是 8。 输入 arr[] = {90, 87, 30, 9, 12, 41, 13, 80, 67, 70} k = 4 输出: 数组的第 4 小的元素是 30。 方法:对数组进行排序这是一种直接的方法。你需要对数组进行排序,然后从左边返回第 K 个元素。 文件名: KthSmallestEle.java 输出 For the array: 56 34 7 9 0 48 41 8 The 3rd smallest element of the array is: 8 For the array: 90 87 30 9 12 41 13 80 67 70 The 4th smallest element of the array is: 30 时间复杂度: 上述程序的时间复杂度取决于 sortArr() 方法中实现的排序技术。在我们的例子中,使用的技术是选择排序。因此,上述程序的时间复杂度为 O(n2),其中 n 是数组中元素的总数。 方法:使用最小堆也可以使用最小堆来查找数组的第 k 小的元素。 文件名: KthSmallestEle1.java 输出 For the array: 56 34 7 9 0 48 41 8 The 3rd smallest element of the array is: 8 For the array: 90 87 30 9 12 41 13 80 67 70 The 4th smallest element of the array is: 30 时间复杂度: 上述程序的时间复杂度为 O(n + k * log(n)),其中 n 是数组中元素的总数,k 是需要搜索的最小元素的排名。 方法:使用最大堆也可以使用最大堆来查找数组的第 k 小的元素。观察以下算法。 步骤 1: 使用输入数组的前 k 个元素(a[0], …, a[k - 1])创建一个最大堆。 步骤 2: 将第 k 个元素之后的每个元素(a[k] 到 a[n - 1])与最大堆的根元素进行比较。在进行比较时,会发生以下两种情况。 情况 1: 如果当前元素小于最大堆的根元素,则用当前元素替换根元素,并调用 heapify() 方法重新排列最大堆中的元素。 情况 2: 如果当前元素大于根元素,则忽略该元素。 文件名: KthSmallestEle2.java 输出 For the array: 56 34 7 9 0 48 41 8 The 3rd smallest element of the array is: 8 For the array: 90 87 30 9 12 41 13 80 67 70 The 4th smallest element of the array is: 30 时间复杂度: 步骤 1 的时间复杂度为 O(k),步骤 2 的时间复杂度为 O(n - k) * log(k)。因此,上述程序的时间复杂度为 O(k + (n - k) * log(k)),其中 n 是数组中元素的总数,k 是需要搜索的最小元素的排名。 方法:使用快速排序在快速排序中,我们选择一个枢轴元素,然后将其放置到正确的位置。枢轴元素会将数组划分为两个未排序的子数组。在此方法中,我们不会执行完整的快速排序。实际上,我们将在枢轴元素成为给定数组的第 k 小元素时停止。 文件名: KthSmallestEle3.java 输出 For the array: 56 34 7 9 0 48 41 8 The 3rd smallest element of the array is: 8 For the array: 90 87 30 9 12 41 13 80 67 70 The 4th smallest element of the array is: 30 时间复杂度: 由于在大多数情况下我们不会完成快速排序,因此上述程序的平均时间复杂度为 O(n)。但是,最坏情况下的时间复杂度为 O(n2),其中 n 是输入数组中元素的总数。 方法:使用有序映射和元素频率在此方法中,我们将使用一个有序映射,然后将每个元素与其出现频率进行映射。我们已经知道有序映射始终按排序顺序存储数据。因此,我们将不断累加每个元素的出现频率,直到它等于或大于 k,这样就可以从开头找到第 k 个元素,即给定数组的第 k 小的元素。 文件名: KthSmallestEle4.java 输出 For the array: 56 34 7 9 0 48 41 8 The 3rd smallest element of the array is: 8 For the array: 90 87 30 9 12 41 13 80 67 70 The 4th smallest element of the array is: 30 下一个主题# |
? Java 凭借其强大的类型系统,可确保类型安全并 避免许多常见的编程错误。然而,这也意味着您可能会在编译期间遇到“类型不兼容”错误。当您尝试使用另一种类型的值来分配或使用一种类型的值时,就会发生这些错误……
阅读 4 分钟
在本节中,我们将创建一个 Java 程序,该程序将给定的数字转换为单词。例如,如果给定的数字是 54,297,则输出应为 Fifty-Four Thousand Two Hundred Ninety-Seven。让我们为它创建一个 Java 程序。NumberToWordExample1.java class NumberToWordExample1 { // 用户定义的静态方法...
阅读9分钟
在本节中,我们将学习什么是九边形数,并创建 Java 程序来检查给定的数字是否为九边形数。九边形数程序经常在 Java 编码面试和学术界中被问到。九边形数九边形数是图形...
5 分钟阅读
OOPS MCQ 1) 以下哪种语言是作为第一种纯粹面向对象的语言开发的? SmallTalk C++ Kotlin Java 显示答案 工作区 答案:a. SmallTalk 说明:这种编程语言是作为第一种纯粹的 OOPS(面向对象)语言发明的。该语言由 Alan Kay 在 20 世纪 70 年代初设计。 2) 谁开发了面向对象编程? Adele...
阅读 13 分钟
在 Java 中,数组是最重要的数据结构,其中包含相同类型的元素。它在连续的内存分配中存储元素。数组有两种类型,即静态数组和动态数组。在本节中,我们将只关注静态数组...
阅读 2 分钟
通过 Java OffsetDateTime 类的 getOffset() 函数可以获取区域偏移量,例如“+05:00”。语法:public ZoneOffset getOffset() 参数:此方法不接受任何参数。返回值:它返回区域偏移量,而不是 null。示例 1:解析 OffsetDateTime 对象并获取其时区...
阅读 3 分钟
命令模式将请求封装为一个对象,从而允许我们使用不同的请求、队列或日志请求来参数化其他对象,并支持可撤销的操作。这个定义一开始可能有点令人困惑,但让我们一步步来。通过类比我们上面的遥控器问题…
阅读 3 分钟
? Java 的内存映射文件提供了一种将文件的一部分直接映射到内存并方便快速访问文件内容的强大方法。这种技术在处理大文件或需要检索文件数据时可以提高性能……
阅读 4 分钟
给定的输入数组 inputArr[] 包含非负数。我们的任务是找到最长子数组的长度,该子数组的所有元素都是偶数或奇数。示例:1 输入:int arr[] = {5, 5, 3, 7, 9, 7, 0,...
阅读9分钟
一个称为“好数”的特殊数学概念指的是每个数字都大于其右侧数字之和的数字。在此练习中,我们负责在 [L, R] 范围内查找并打印所有好数,同时省略任何...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India