Java 中的下一个更大元素2024年9月10日 | 阅读 9 分钟 在数组中,下一个更大的元素是指最接近且大于当前元素的元素。另外,下一个更大的元素应该出现在当前元素的后面。任务是返回整数数组中每个元素的下一个更大的元素。如果数组中的某个元素的下一个更大元素不存在,则为此元素打印适当的消息。为简单起见,我们假设输入数组中的所有元素都非负。让我们通过一个例子来理解。 输入 arr[] = {14, 16, 9, 90, 99, 2, 6, 19, 4} 带解释的输出
注意 1:对于最后一个元素,下一个更大的元素将始终是 -1,因为在最后一个元素之后,我们没有其他元素了。注意 2:对于按非递增顺序排序的输入数组,下一个更大元素的值将始终为 -1。这是因为从当前元素开始的下一个元素将始终小于或等于当前元素,因为元素是按非递减顺序排列的。例如 输入 arr[] = {89, 60, 58, 45, 39, 36, 20} 带解释的输出 输入数组所有元素的下一个更大元素都是 -1。 对于数字 89,没有元素出现在 89 之后且大于 89。 对于数字 60,没有元素出现在 60 之后且大于 60。 对于其他元素也可以给出类似的解释。 方法有两种方法可以解决下一个更大的元素问题:一种是朴素方法,另一种是使用堆栈。让我们从朴素方法开始。 朴素方法朴素方法很简单。你需要使用两个 for 循环。外层循环用于选择元素,内层循环用于将元素与选定的元素(当前元素)进行比较。当找到一个更大的元素(与当前元素比较后)时,内层循环会立即终止。观察以下程序。 文件名: NGE.java 输出 The input array is: 14 16 9 90 99 2 6 19 4 The next greater element for the element 14 is: 16 The next greater element for the element 16 is: 90 The next greater element for the element 9 is: 90 The next greater element for the element 90 is: 99 The next greater element for the element 99 does not exist. The next greater element for the element 2 is: 6 The next greater element for the element 6 is: 19 The next greater element for the element 19 does not exist. The next greater element for the element 4 does not exist. 时间复杂度:上面的程序使用了两个嵌套的 for 循环。因此,该程序的 time complexity 为 O(n2),其中 n 是输入数组中元素的总数。 空间复杂度:该程序没有使用任何额外的空间。因此,该程序的 space complexity 为 O(1)。 优化方法:使用堆栈算法 步骤 1:将第一个元素压入堆栈。 步骤 2:逐个选择剩余的元素,并在循环中重复提到的子步骤。
步骤 3:最终,堆栈中的下一个元素被压入。 步骤 4:在步骤 2 中提到的循环完成后,继续从堆栈中弹出所有剩余的元素,并为它们显示 -1,因为它们没有下一个更大的元素。 文件名: NGE1.java 输出 The input array is: 14 16 9 90 99 2 6 19 4 The next greater element for the element 14 is: 16 The next greater element for the element 9 is: 90 The next greater element for the element 16 is: 90 The next greater element for the element 90 is: 99 The next greater element for the element 2 is: 6 The next greater element for the element 6 is: 19 The next greater element for the element 4 does not exist. The next greater element for the element 19 does not exist. The next greater element for the element 99 does not exist. 时间复杂度:该程序的 time complexity 为 O(n),其中 n 是数组中元素的总数。 空间复杂度:该程序的 space complexity 为 O(n),其中 n 是数组中元素的总数。 我们看到输出中数字出现的顺序与输入数组中的顺序不同。为了保持顺序,需要反向遍历。观察以下程序。 文件名: NGE2.java 输出 The input array is: 14 16 9 90 99 2 6 19 4 The next greater element for the element 14 is: 16 The next greater element for the element 16 is: 90 The next greater element for the element 9 is: 90 The next greater element for the element 90 is: 99 The next greater element for the element 99 does not exist. The next greater element for the element 2 is: 6 The next greater element for the element 6 is: 19 The next greater element for the element 19 does not exist. The next greater element for the element 4 does not exist. 时间复杂度:该程序的 time complexity 为 O(n),其中 n 是数组中元素的总数。 空间复杂度:该程序的 space complexity 为 O(n),其中 n 是数组中元素的总数。 下一个主题Java 中的星形数字 |
在本教程中,我们将讨论如何在 Java 中计算最大和,使得没有两个元素是相邻的。输入是一个填充了正数的数组 (inptArr[])。示例 1:输入 int inptArr[] = {15, 15, 110, 1100, 110, 15, 7, 80} 输出 1210 解释:...
阅读 8 分钟
java.time.format.DecimalStyle 类 toString() 方法。要在 Java 中获取此 DecimalStyle 的 String 值,请使用 DecimalStyle 类。String 值由此函数返回的 String 表示。语法:public String toString() 参数:主方法不接受任何参数。返回值:...
阅读 2 分钟
在处理夏令时日期时,在 Java 代码中设置正确的时间区域非常重要。在本节中,我们将显示带 GMT 的时区列表。时区是一个区域,它在法律、商业和社交方面遵循统一的标准时间……
阅读 4 分钟
? Java 是一种用途广泛且功能强大的编程语言,由于其“一次编写,到处运行”的理念而广受欢迎。实现这一点的关键组件之一是 Java 运行时环境 (JRE)。在本节中,我们将深入探讨 JRE 的作用...
阅读 3 分钟
String 类的 regionMatches() 方法有两种变体,可用于测试两个字符串区域是否匹配或相等。此方法有两种变体,即一种忽略大小写,另一种区分大小写。regionMatches() 方法用于...
阅读 4 分钟
在 Java 编程世界中,图形用户界面 (GUI) 在创建交互式应用程序方面发挥着至关重要的作用。在开发基于 GUI 的应用程序时,有效处理关闭操作至关重要。在 Java 中,“设置默认关闭操作”是一个关键方法,用于控制行为...
5 分钟阅读
在 Java 中,Collection 是一个属于 java.util 包的框架。它提供了用于操作对象组的类和接口。Java 提供了各种集合类,如 ArrayList、LinkedList、HashSet 和 TreeSet 等。在本节中,我们将编写一个 Java 程序来获取...
阅读 4 分钟
在 Java 中,递增和递减运算符是一元运算符。它们分别用于将变量的值增加或减少 1。递增运算符由一对加号(++)表示,递减运算符由...
阅读 6 分钟
Java 中的自定义类允许开发人员通过定义封装状态(属性)和行为(方法)的新类来创建自己的数据类型。这种灵活性是 Java 面向对象特性的基础,它能够创建复杂且可重用的代码。以下是有关自定义的详细指南...
5 分钟阅读
每个局部变量和最终空白字段在访问任何值时都会具有赋给它的值。值访问将包括变量的名称或表达式中出现的区域,除了赋值运算符 "=" 的左侧操作数。要...
阅读 15 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India