Stack

Share on:

Stack Overview

Implementation Stack

Monotonic Stack (单调栈)

单调栈主要作用是在O(n)的时间内求某个元素的下一个最值,或者某元素前一个的最值,衍生而来就有从前往后和从后往前两种写法。针对单调栈问题第一步无疑是确定这是一个单调增还是单调减 (当然最难的是怎么发现这是一个单调栈问题)

Parse String

Iterator

不知道这个部分算哪类了,就放在Stack里面吧。先看看Java是如何实现Iterator的,主要有hasNext(), Next(), Remove() 三个函数,一般Remove()不需要额外设计。

Others

Code

单调栈

 1// from begin to end
 2for (int num : nums2){
 3    while (!stack.isEmpty() && stack.peek() < num){
 4        int cur = stack.pop();
 5        // record rst
 6    }
 7    stack.push(num);
 8}
 9
10// from end to begin
11for (int i = nums2.length - 1; i >= 0; i--){
12    int num = nums2[i];
13    while (!stack.isEmpty() && stack.peek() <= num){
14        stack.pop();
15    }
16    if (!stack.isEmpty()){
17        // record rst
18    }
19    stack.push(num);
20}