import java.util.Stack;
/**
* 功能:O(1)时间复杂度求栈中最小元素
* 思路:空间换取时间,使用两个栈,stack1栈存储数据,stack2栈存储最小值;
* stack1入栈时,发现比stack2栈顶元素还小,则同时入stack2;stack1出栈时,同时也将stack2中的元素出栈。
*/
public class Main {
private Stack<Integer> stackValue = new Stack<Integer>();
private Stack<Integer> stackMin = new Stack<Integer>();
/**
* @param integer
*/
public void push(Integer integer) {
stackValue.push(integer);
if (integer < getMin()) {
stackMin.push(integer);
}
}
/**
* @return
*/
public Integer pop() {
if (stackValue.peek() == stackMin.peek()) {
stackMin.pop();
}
return stackValue.pop();
}
/**
* @return
*/
public Integer getMin() {
if (stackMin.size() == 0) {
return Integer.MAX_VALUE;
}
return stackMin.peek();
}
public static void main(String[] args) {
Main main = new Main();
main.push(10);
main.push(20);
main.push(9);
main.push(15);
System.out.println(main.getMin());
}
}