📅  最后修改于: 2023-12-03 15:37:09.613000             🧑  作者: Mango
在计算机科学中,右侧最小的较大元素通常指在数组中找到一个元素x,使得该元素右侧的最小元素大于x。
在解决此问题时,可以使用单调栈数据结构来实现该算法。
单调栈是一种特殊的栈,它可以保持栈内元素的单调性,常见的有单调递增栈和单调递减栈。
下面是单调递增栈的实现代码:
def monotonic_stack(nums):
n = len(nums)
stack = []
res = [-1] * n
for i in range(n):
while stack and nums[i] > nums[stack[-1]]:
res[stack.pop()] = nums[i]
stack.append(i)
return res
def find_right_minimum(nums):
n = len(nums)
stack = []
res = [-1] * n
for i in reversed(range(n)):
while stack and nums[i] >= nums[stack[-1]]:
stack.pop()
if stack:
res[i] = nums[stack[-1]]
stack.append(i)
return res
assert find_right_minimum([12, 13, 1, 5, 3, 10, 6]) == [13, -1, 5, 10, 10, -1, -1]
assert find_right_minimum([1, 2, 3, 4, 5, 6]) == [2, 3, 4, 5, 6, -1]
assert find_right_minimum([6, 5, 4, 3, 2, 1]) == [-1, -1, -1, -1, -1, -1]
以上是右侧最小的较大元素的介绍和实现代码。通过单调递增栈的思想,我们可以在O(n)的时间复杂度内解决这个问题。