Stack

单调栈模板及应用

for (int i = 0; i < array.length; i++) {
  //这里的大小关系比较取决于我们是在使用递增栈还是递减栈, 比如这里是递增栈
  whhile (!stack.isEmpty() && array[stack.peek()] > array[i]) {
    // do sth
  }
  stack.push(i);
}

//补刀,因为栈里面可能还剩下element没有被pop
while (stack.isEmpty()) {
  //因为这里面没有右边的元素了,所以我们直接pop,逻辑和上面类似
  // do sth
}

一般来说,如果我们想要O(1)时间查询某个数两边第一个比他大或者第一个比他小的数,那么可以使用递增递减栈。

题目

往回走

  • Leetcode 71. Simplify Path

递增递减栈

  • Leetcode 84. Largest Rectangle in Histogram
  • Leetcode 85. Maximal Rectangle
  • Leetcode 321. Create Maximum Number

results matching ""

    No results matching ""