Poison

155. Min Stack

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class MinStack {

private final Stack<Integer> stack;
private final Stack<Integer> decreaseStack; // 自底向上非严格递减栈,允许重复元素

public MinStack() {
this.stack = new Stack<>();
this.decreaseStack = new Stack<>();
}

public void push(int val) {
stack.push(val);
if (decreaseStack.isEmpty() || val <= decreaseStack.peek()) {
decreaseStack.push(val);
}
}

public void pop() {
int value = stack.pop();
if (value == decreaseStack.peek()) {
decreaseStack.pop();
}
}

public int top() {
return stack.peek();
}

public int getMin() {
return decreaseStack.peek();
}

}
Reference

155. Min Stack
剑指 Offer 30. 包含min函数的栈