自底向上的单调递减栈,一般用来寻找下一个更大的元素。
常见做法是从后往前遍历数组,栈顶元素如果小于当前元素就出栈,保持单调性
python
def nextGreaterElements(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
stack = []
res = [-1]*n
for i in range(n-1,-1,-1):
while stack and stack[-1] <= nums[i]:
stack.pop()
if stack:
res[i] = stack[-1]
stack.append(nums[i])
return res
自底向上的单调递增栈,一般用来寻找前一个更小的元素。
常见做法是从前往后遍历数组,栈顶元素如果大于当前元素就出栈,保持单调性
python
def lastMinerElements(self, nums):
res = [-1]*n
stack = []
for i in range(len(nums)):
while stack and nums[i] < stack[-1]:
stack.pop()
if stack:
res[i] = stack[-1]
stack.append(nums[i)
return res