📜  右边的NGE数量(1)

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

右边的 NGE 数量

当我们需要对一个数组中的每一个元素寻找它右边第一个比它大的元素时,我们可以使用 Next Greater Element (NGE)算法。在计算机科学中,寻找右边的 NGE 数量是一个常见的问题,尤其在数组和堆栈算法中。

算法描述

这个问题的解决方法是维护一个单调递减的栈。我们从右往左遍历数组,每当我们遇到一个新的元素时,我们将栈中所有小于等于这个元素的元素弹出栈,并将它们的右边 NGE 数量设置为当前元素的下标减去它们的下标。最后,我们将当前元素入栈。

下面是一个 Python 代码片段实现这个算法:

def right_NGE(numbers):
    stack = []
    nge = [0] * len(numbers)
    for i in range(len(numbers)-1, -1, -1):
        while stack and numbers[i] >= stack[-1][0]:
            stack.pop()
        if stack:
            nge[i] = stack[-1][1] - i
        stack.append((numbers[i], i))
    return nge

这个函数接受一个整数数组作为输入,返回一个新的整数数组。这个新数组代表输入数组中每个元素的右边 NGE 数量。

算法分析

这个算法从右往左遍历数组,所以时间复杂度是线性的,即 O(n)。在每个元素上最多只会进行一次 push 和一次 pop 操作,所以空间复杂度也是 O(n)。

总结

在这篇文章中,我们介绍了如何计算数组中每个元素的右边 NGE 数量。我们使用了一个单调递减的栈来解决这个问题,并在 Python 中实现了它。这个算法的时间复杂度是 O(n),空间复杂度是 O(n)。