📅  最后修改于: 2023-12-03 15:07:27.540000             🧑  作者: Mango
在计算机科学中,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 数量。