在 Python 中查找下一个更大元素2024 年 08 月 29 日 | 阅读 9 分钟 在此问题中,我们将给定一个整数数组,我们需要找到数组中每个元素的下一个更大元素。 下一个更大元素是当前元素的右侧第一个大于当前元素的元素。对于数组中不存在更大元素的元素,我们将为这些元素返回 -1。 让我们看一些例子来理解这个问题。 输入: 数组 = [ 7, 3, 9, 12, 8 ] 输出 7 -> 9 3 -> 9 9 -> 12 12 -> -1 8 -> -1 大于 7 且在其右侧的第一个元素是 9。同样,除了 8 和 12 之外,每个元素在其右侧都存在一个更大的元素。 输入: arr = [ 19, 10, 7, 5, 13 ] 输出 19 -> -1 10 -> 13 7 -> 13 5 -> 13 13 -> -1 除了 19 之外,其他元素的更大对应元素是 13。 方法 - 1在此方法中,我们将使用两个 for 循环来遍历数组。外层循环将遍历数组中的每个元素。内层循环将负责查找当前元素的更大元素。该循环将遍历当前元素右侧的剩余元素。如果没有更大的元素,我们将为该元素打印 -1。 我们将遵循以下步骤来解决此问题
以下是上述方法对应的 Python 代码。 代码 输出 7 - 9 3 - 9 9 - 12 12 - -1 8 - -1 时间复杂度: 由于在此方法中使用了两个循环,因此此方法的时间复杂度为 O(N2) 空间复杂度: 由于没有创建任何额外的数据结构,因此此方法的空间复杂度为 O(1)。 方法 - 2在此方法中,我们将使用堆栈数据结构。 在此方法中,我们将使用堆栈来存储需要查找下一个更大元素的元素。在遍历数组时,我们将一个更大的元素与堆栈的元素配对。我们将继续此过程,直到堆栈的顶部元素值小于当前元素。 我们将遵循以下步骤来使用上述方法解决问题
以下是上述方法对应的 Python 代码。 代码 输出 3 - 9 7 - 9 9 - 12 8 - -1 12 - -1 时间复杂度: 由于我们运行线性循环,因此此方法的时间复杂度为 O(N)。 空间复杂度: 我们使用了额外的空间来存储元素,即堆栈;因此,空间复杂度为 O(N)。 方法 - 3在此新方法中,我们将使用一个映射来查找数组元素的 NGE。 该方法与我们之前看到的方法类似。此方法不同之处在于,我们将只推入和弹出堆栈中的元素一次。此外,数组将在原地修改。我们将数组的元素推入堆栈,直到找到一个大于堆栈顶部元素的元素。因此,当我们找到一个小于当前数组元素的元素时,我们将弹出堆栈的顶部元素。 当所有数组元素都已访问,并且堆栈仍然非空时,堆栈的其余元素在数组中没有 NGE。因此,我们将这些元素从堆栈中弹出,并在原始数组中将其索引处的值更改为 -1。 代码 输出 [9, 9, 12, -1, -1] 时间复杂度: 我们正在使用线性循环。因此,时间复杂度为 O(N)。 空间复杂度: 此方法的空间复杂度为 O(N)。我们使用了此空间来存储堆栈和映射。 方法 - 4有一种更好、更优化的方法来解决这个问题。现在让我们看看那种方法。 以下是使用优化方法解决问题的步骤。
代码 输出 [9, 9, 12, -1, -1] 时间复杂度: 由于我们只遍历一次元素,因此时间复杂度为 O(N)。这是平均时间复杂度;但是,由于某些特定条件的嵌套循环,最坏情况下的时间复杂度可能为 O(N2)。 空间复杂度: 由于我们不使用任何额外空间来存储元素,因此空间复杂度是恒定的,即 O(1)。 |
在本教程中,我们将学习Python的struct模块并理解其功能。Python中的struct模块提供了处理C风格数据结构和二进制数据的工具。它用于根据指定的格式将数据打包到二进制表示或从二进制表示中解包。这对于...
5 分钟阅读
在本教程中,我们将从各个方面比较 Python 的 Argparse、Docopt 和 Click 解析库。Argparse:从 Python 2.7(及更高版本)开始,argparse Python 模块是标准库的一部分,它使解析命令行参数变得更容易。它提供了一个...
7 分钟阅读
在本教程中,我们将学习如何实现和使用。1996年,DBSCAN或基于密度的带噪声空间聚类算法首次提出,并于2014年荣获“时间考验”奖。该“时间考验”...
阅读9分钟
Set:Python 内置的 set 类型具有以下特点:集合是无序的。集合由唯一元素组成。不允许使用重复元素。构成集合的元素必须是不可变类型;集合本身可以更改。Python 中的 Set 是...
阅读 3 分钟
在 Python 中构建项目令人兴奋。Python 提供了不同的模块和库,使项目具有交互性。其中一个属性是图形用户界面 (GUI),可以使用 Tkinter、PyQt5、Kivy 等 Python 库添加到项目中。...
阅读20分钟
总的来说,移动自动化被认为是非常困难的,需要高技能。我们相信测试人员必须具备多样化的技能。您不必精通所有这些技能,但考虑到各种...
5 分钟阅读
字典是 Python 中最常用的数据类型之一。它是键:值对的无序集合。每个值都有一个对应的键来标识它。字典是可变集合,意味着我们可以修改值。使一个...
阅读 4 分钟
在本教程中,我们将学习如何使用 AST 来理解代码。什么是 AST 模块?Python 中的 AST(抽象语法树)模块提供了在结构级别上与 Python 代码交互的工具。抽象语法树是树状表示...
阅读 6 分钟
树莓派是一款低成本、信用卡大小的计算机,由英国树莓派基金会开发,用于支持教育机构的基础计算机科学教学。此后,它因各种项目而在创客、爱好者和专家中广受欢迎。Python 是一种流行的、高级的...
阅读25分钟
文字编程总是与文字错误相关联,因为我们在编码时遇到错误是非常普遍的。错误对于所有程序员来说都非常普遍,这不仅仅是初学者才会遇到的。即使是编码多年的程序员...
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India