Java 中具有 K 个不同数字的最小子数组2024年9月10日 | 阅读 9 分钟 我们得到一个包含整数的数组。此外,还给出了一个整数 k。我们的任务是找到一个由最小范围 [lft, rght](lft 和 rght 都包含在范围内)组成的数组,使得该范围内恰好有 k 个不同的数字。如果无法在给定的输入数组中找到 k 个不同的元素,则应在控制台上显示适当的消息。请观察以下示例。 示例 1 输入 arr[] = { 11, 11, 11, 12, 12, 13, 13, 14, 15, 17 }, k = 4 输出 {6, 9} 解释:范围 [6, 9] 包含四个不同的元素。此外,该窗口大小或范围大小是最小的。 示例 2 输入 arr[] = { 11, 12, 12, 13}, k = 3 输出 {0, 3} 解释:范围 [0, 3] 包含三个不同的元素。此外,该窗口大小或范围大小是最小的。 示例 3 输入 arr[] = { 11, 12, 12, 12, 13, 13}, k = 5 输出:无法在输入数组 arr[] 中找到五个不同的元素。 解释:输入数组只包含三个不同的元素。因此,不可能找到五个不同的元素。 朴素方法该问题的朴素方法是找出所有子数组,然后检查子数组是否为 k 的大小。但是,有几点需要考虑。 算法步骤 1:将提供的输入数组的每个元素作为所需子数组的起始元素 [第 j 个元素]。 步骤 2:在每次迭代中,创建一个空集来存储唯一的子数组元素。
步骤 3:如果 (k == n),则意味着没有找到从第 j 个索引开始的任何所需子数组。因此,应终止外循环。 步骤 4:显示找到的输出(如果找到)。否则,应在控制台上打印适当的消息。 实施让我们来实现上述步骤。请观察以下程序。 文件名:SmallestSubarray.java 输出 For the input array: 11 11 11 12 12 13 13 14 15 17 The smallest subarray containing 4 distinct elements ranges from: [6, 9] For the input array: 11 12 12 13 The smallest subarray containing 3 distinct elements ranges from: [0, 3] For the input array: 11 12 12 12 13 13 The smallest subarray containing 5 distinct elements is not found. 复杂度分析:该程序使用嵌套 for 循环,使程序的时间复杂度为 O(n2)。此外,该程序使用哈希集,使程序空间复杂度为 O(n),其中 n 是输入数组中存在的总元素数。 现在,我们将进行一些优化以降低时间和空间复杂度。 方法:滑动窗口使用滑动窗口,我们可以降低程序的时间复杂度以及空间复杂度。但在编写程序之前,让我们看看实现结果所需的步骤。 步骤 1:创建一个地图来存储每个元素的出现次数。 步骤 2:取两个变量:st 和 ed,表示所需子数组的起始和结束位置。 步骤 3:在这里,我们将使用 j 和 k 作为窗口的起始点和结束点,并将 j = 0 和 k = 0。 步骤 4:遍历输入数组直到窗口的结束指针 (k) 到达输入数组的末尾。即,while( k < n) 执行以下操作
实施让我们看看上述步骤的实现。 文件名:SmallestSubarray1.java 输出 For the input array: 11 11 11 12 12 13 13 14 15 17 The smallest subarray containing 4 distinct elements ranges from: [6, 9] For the input array: 11 12 12 13 The smallest subarray containing 3 distinct elements ranges from: [0, 3] For the input array: 11 12 12 12 13 13 The smallest subarray containing 5 distinct elements is not found. 复杂度分析:在最坏的情况下,元素最多只能添加或从哈希映射中删除一次。因此,程序的时间复杂度为 O(n),其中 n 是输入数组中存在的总元素数。在最坏的情况下,哈希映射最多只能包含 k 个元素。因此,程序的空间复杂度为 O(k)。 下一个主题Java 中的字符串自定义排序 |
深度学习已成为快速变化的 人工智能 领域的一股颠覆性力量,在自然语言处理、自主系统、图像和音频识别等方面取得了显著的突破。虽然 Python 曾是许多深度学习从业者的首选语言,但 Java……
阅读 3 分钟
排序是将列表或数组的元素按特定顺序排列的一种方法。顺序可以是升序或降序。数值顺序和字典序(字母顺序)是一种广泛使用的顺序。在本节中,我们将学习如何对数组进行排序...
阅读 6 分钟
Java中的Image类是用于图形图像表示的所有其他类的抽象超类。类声明java.awt.Image类的声明如下:Public abstract class Image extends Object Class Fields下表显示了Image类的各种字段。字段描述protected float accelerationPriority它优先加速...
阅读 4 分钟
在编程世界中,null 值长期以来一直是令人沮丧的根源,导致 NullPointerException 导致应用程序崩溃并产生意外行为。为了解决这个问题,Java 在 Java 8 中引入了 Optional 类,提供了一个容器类型,该类型包含一个非 null...
阅读 4 分钟
在 Java 面试中,最常被问到的问题之一是 Java 中的停车场设计。Java 中的停车场设计是一个设计问题,涉及车辆如何在停车场中停放。它主要在 HLD...
7 分钟阅读
为了从 SortedSet 中删除所有元素,我们将使用 clear() 方法。clear() 方法不会删除集合,它只会从集合中移除所有条目。换句话说,clear() 方法仅用于清空现有的 Set……
阅读 3 分钟
在 Java 中,可以使用子类引用或超类引用来引用子类的对象。不同之处在于可以访问哪些方法或字段,以及程序的行为如何根据引用类型而改变。引用子类对象在...
5 分钟阅读
数字图像分析和计算机视觉都严重依赖于图像处理。为了获得预期的结果,这需要图像的修改。Java 有许多功能强大且特性丰富的库。使用它们,我们可以操纵图像。图像方向的操纵...
阅读 6 分钟
在本节中,我们将学习什么是幸运数,并创建 Java 程序来检查给定的数字是否是幸运数。幸运数程序经常在 Java 编码测试和学术中出现。幸运数 自然数的序列或...
阅读 3 分钟
在数组中找到差值最小的数对是 Java 中一个常见的算法问题。它涉及比较数对之间的差异,以找出差值最小的数对,Java 提供了多种解决方案来解决这一挑战。示例 1:输入:A[] = {4, 7,...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India