单调栈

概念

单调栈就是栈内元素递增或者单调递减的栈,并且只能在栈顶操作。单调栈的维护是O(n)的时间复杂度,所有元素只会进进栈一次

性质

  1. 单调栈里面的元素具有单调性;
  2. 元素加入栈前会把栈顶破坏单调性的元素删除;
  3. 使用单调栈可以找到元素向左遍历的第一个比他小的元素(单增栈),也可以找到元素向左遍历第一个比他大的元素(单减栈);
  4. 一般使用单调栈的题目具有以下的两点:
    a. 离自己最近(栈的后进先出的性质)
    b. 比自己大(小)、高(低);

适用问题

要知道单调栈的适用于解决什么样的问题,我们首先需要知道单调栈的作用。单调栈分为单调递增栈和单调递减栈,通过使用单调栈我们可以访问到下一个比他大(小)的元素(或者说可以)。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时我们通常使用单调栈。

基本流程图

单调栈