剑指offer 30.包含min函数的栈
题目描述
解题思路
注意这题不是单调栈,因为题目要求 push、pop、min 的复杂度均为o(1),而单调栈入栈的复杂度为o(n)。并且,单调栈是用来解决 下一个更大元素 问题的。
这题的辅助栈的大小和普通栈同步增长,并且每次入栈时,都保存当前状态的最小元素。
public class Solution {
public Stack<Integer> stack = new Stack<>(); //普通栈,主要用于 top() 方法,新元素直接入栈
public Stack<Integer> minStack = new Stack<>(); //辅助栈,主要用于 min() 方法,每次将当前最小元素入栈
public void push(int node) {
stack.push(node); //普通栈则直接入栈
if (minStack.isEmpty() || node < minStack.peek()) {
minStack.push(node);
} else {
minStack.push(minStack.peek());
}
}
public void pop() {
stack.pop();
minStack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return minStack.peek();
}
}