/**使用一个主栈用来存储数据,一个最小值栈,用来存放最小值。
*主栈和最小值栈的容量和存储数据量没有必要保持一致。
*/
import java.util.Stack;
public class Solution {
Stack<Integer> stackMain = new Stack<>(); // 主栈,存储所有数据
Stack<Integer> stackMin = new Stack<>(); // 最小值栈,存储最小值
public Solution() {
stackMain = new Stack<>();
stackMin = new Stack<>();
}
// 测试主栈和最小值栈是否为空
public boolean empty() {
return stackMain.empty() && stackMin.empty();
}
// 入栈操作,如果主栈和最小值栈都为空,则同时入栈
// 如果不为空,入栈元素和最小值栈顶部元素对比
public void push(int node) {
Stack<Integer> tmp = new Stack<>();
if (empty()) {
stackMain.push(node);
stackMin.push(node);
}
stackMain.push(node);
if (stackMin.peek() >= node)
stackMin.push(node);
}
// 出栈操作,先判断出栈元素是否是最小值
public void pop() {
if (stackMain.peek() == stackMin.peek())
stackMin.pop();
stackMain.pop();
}
// 返回栈顶元素
public int top() {
return stackMain.peek();
}
// 返回最小值
public int min() {
return stackMin.peek();
}
}