📜  与输入顺序相同的下一个更大的元素(1)

📅  最后修改于: 2023-12-03 15:35:56.064000             🧑  作者: Mango

介绍

在处理数组相关问题时,可能会涉及到寻找数组中某个元素的下一个更大的元素,且要求这个更大的元素的位置在原数组中与该元素位置相同。这个问题可以通过使用栈来解决,时间复杂度为 O(n)。

思路

我们可以从右往左遍历数组,维护一个栈。栈中存储原数组中尚未找到下一个更大元素的元素。对于每个元素,我们首先将栈顶元素与当前元素进行比较。如果栈顶元素更大,那么当前元素的下一个更大元素就是栈顶元素。我们把这个更大的元素存储到结果数组中,并将当前元素入栈。如果当前元素更大,那么我们就需要弹出栈顶元素,继续比较栈顶元素和当前元素,直到栈为空或者栈顶元素更大。

代码

下面是一个 Python 代码的实现:

def next_greater_element(nums):
    stack = []
    res = [0] * len(nums)

    for i in range(len(nums) - 1, -1, -1):
        while stack and stack[-1] <= nums[i]:
            stack.pop()

        res[i] = stack[-1] if stack else -1
        stack.append(nums[i])

    return res

上面的代码时间复杂度为 O(n),空间复杂度为 O(n)。