循环数组的单调栈(单调递减)问题,可以通过两倍数组长度+取余操作模拟循环数组。
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
n = len(nums)
stack = []
res = [0] * n
for i in range(2*n-1, -1, -1):
pos = i % n
while stack and stack[-1] <= nums[pos]:
stack.pop()
if not stack:
res[pos] = -1
else:
res[pos] = stack[-1]
stack.append(nums[pos])
return res