import java.util.Stack;
public class Main {
// 栈1存数据,栈2存最小值
static Stack<Integer> mainStack = new Stack<>();
static Stack<Integer> minStack = new Stack<>();
// 入栈:如果最小值栈为空或最小值栈的栈顶比要添加的数据大,就把数据压到最小值栈中
static void addNum(Integer num) {
mainStack.add(num);
if (minStack.empty() || minStack.peek() > num) {
minStack.add(num);
}
}
// 出栈:如果最小值栈的栈顶跟数据栈的栈顶相等,最小值栈也出栈一次
static void popNum() {
if (mainStack.peek() == minStack.peek()) {
minStack.pop();
}
mainStack.pop();
}
// 最小值:最小值栈的栈顶
static Integer getMin() {
return minStack.peek();
}
public static void main(String[] args) {
addNum(4);
addNum(6);
addNum(2);
System.out.println(getMin());
popNum();
System.out.println(getMin());
}
}
时间复杂度:O(1)
空间复杂度:O(1) ~ O(n)