class MinStack {
private Stack<Integer> dataStack; // 用于存储数据的栈
private Stack<Integer> minStack; // 用于存储最小值的栈
/** 初始化 MinStack */
public MinStack() {dataStack = new Stack<>(); // 初始化存储数据的栈
minStack = new Stack<>(); // 初始化存储最小值的栈}
/** 将元素 x 推到栈顶 */
public void push(int x) {dataStack.push(x); // 数据栈间接将 x 推到栈顶
if (minStack.isEmpty() || x <= minStack.peek()) { // 如果最小值栈为空或者 x <= 最小值栈顶,将 x 推到最小值栈顶
minStack.push(x);
}
}
/** 删除栈顶元素 */
public void pop() {if (!dataStack.isEmpty()) { // 如果数据栈不为空
int top = dataStack.pop(); // 删除数据栈顶并获取栈顶元素值
if (top == minStack.peek()) { // 如果删除的元素是最小值栈顶元素
minStack.pop(); // 将最小值栈顶元素也删除}
}
}
/** 返回栈顶元素 */
public int top() {if (!dataStack.isEmpty()) { // 如果数据栈不为空
return dataStack.peek(); // 间接返回数据栈顶元素}
return -1; // 其余状况返回 -1,也能够抛出异样
}
/** 返回栈的最小元素 */
public int min() {if (!minStack.isEmpty()) { // 如果最小值栈不为空
return minStack.peek(); // 返回最小值栈顶元素}
return -1; // 其余状况返回 -1,也能够抛出异样
}
}