📜  右侧 NGE 的数量(1)

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

右侧 NGE 的数量

在计算机科学中,NGE(Next Greater Element,下一个更大的元素)问题是一个常见的问题。给定一个数组,对于每个元素,找出右侧(后面)第一个大于它的元素。如果不存在,则该输出为-1。本文将介绍如何在程序中计算右侧 NGE 的数量。

解决方法

在程序中计算右侧 NGE 的数量可以使用栈和逆序遍历。我们可以从右到左遍历数组,并将元素压入栈中。我们使用一个计数器来跟踪右侧 NGE 的数量。 对于每个元素,我们弹出栈中不小于当前元素的所有元素,并将它们的右侧 NGE 数量增加。 最后,我们将当前元素压入栈中。

下面是一个示例代码片段,它计算了每个元素的右侧 NGE 数量:

def count_right_nge(arr):
    n = len(arr)
    stack = []
    counts = [0] * n

    # Traverse the array from right to left
    for i in range(n-1, -1, -1):
        num = arr[i]

        # Pop the elements from the stack
        # which are not greater than current element
        while stack and stack[-1] <= num:
            stack.pop()

            # Increment the count for each popped element
            counts[i] += 1

        # Push the current element into the stack
        stack.append(num)

    return counts
示例

假设我们有以下数组:

arr = [4, 5, 2, 25, 7, 9, 8, 10]

我们可以使用以下代码计算每个元素的右侧 NGE 数量:

>>> counts = count_right_nge(arr)
>>> print(counts)
[0, 0, 2, 0, 2, 1, 1, 0]

上面的示例中,第一项元素右侧没有比它大的元素,因此其值为0。第二项元素右侧也没有比它大的元素,因此其值为0。 第三项元素右侧有两个比它大的元素(5和25),因此其值为2。同样,对于其他元素,我们也可以计算出它们的右侧 NGE 数量。

总结

在本文中,我们介绍了使用栈和逆序遍历计算右侧 NGE 的数量。该方法的时间复杂度为 $O(n)$,可以快速计算每个元素的右侧 NGE 数量。