单调栈实际上就是栈,栈里面的元素按照单调递增或者单调递减排列,满足单调性。

创建单调栈

以单调递减栈为例,遍历数组,如果栈顶没有元素,则将该元素压入栈中,如果当前元素大于栈顶元素,则栈顶出栈,直到当前元素小于栈顶,或者栈中没有其他元素,把当前元素压入栈中。如果当前元素小于栈顶,则直接压入栈中。
单调栈.gif

参考代码

  1. def nextGreaterElement(nums: list):
  2. length = len(nums)
  3. res, stack = [-1] * length, []
  4. for i in range(length):
  5. while stack and nums[stack[-1]] < nums[i]:
  6. idx = stack.pop()
  7. res[idx] = nums[i]
  8. stack.append(i)
  9. return res

单调栈作用

单调栈是处理”下一个更大元素”这类问题的一种数据结构

739. 每日温度.md