public class MinStack {
private Stack<Integer> mainStack = new Stack<Integer>();
private Stack<Integer> minStack = new Stack<Integer>();
/**
* 入栈操作
* @param :入栈的元素
*/
public void push(int element) {
mainStack.push(element);
//如果辅助元素为空,或者新元素小于或等于辅助栈栈顶,
if (minStack.isEmpty() || element <= minStack.peek()) {
minStack.push(element);
}
}
/**
* 出栈操作
*/
public Integer pop() {
//如果出栈元素和辅助栈栈顶元素值相等,辅助栈出栈
if (mainStack.peek().equals(minStack.peek())) {
minStack.pop();
}
return mainStack.pop();
}
/**
* 获取栈的最小元素
*/
public int getMin() {
if (mainStack.empty()) {
//使用断言
Assert.notNull(mainStack.empty(), "stack is empty");
}
return minStack.peek();
}
public static void main(String[] args) {
MinStack stack = new MinStack();
stack.push(4);
stack.push(9);
stack.push(7);
stack.push(3);
stack.push(8);
stack.push(5);
System.out.println(stack.getMin());
stack.pop();
stack.pop();
stack.pop();
System.out.println(stack.getMin());
}
}
------------------------------------代码摘自漫画算法一文------------------------------------------------------