/*
建立两个栈 分别存放正常的数据和最小的数据,用来存放最小数据的栈 每一层都存放上一层最小与新存放数中最小的那个,
*/
public class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
stack = new Stack<Integer>();
minStack = new Stack<Integer>();
}
public void push(int x) {
stack.push(x);
if(minStack.isEmpty()) {
minStack.push(x);
} else {
minStack.push(Math.min(minStack.peek(), x));
}
return;
}
public int pop() {
minStack.pop();
return stack.pop();
}
public int min() {
return minStack.peek();
}
}
//用priority queue 实现 插入的时间复杂度是o(nlogn)
public class MinStack {
private Stack<Integer> stack;
private PriorityQueue<Integer> q;
public MinStack() {
stack = new Stack<Integer>();
q = new PriorityQueue<Integer>();
}
/*
* @param number: An integer
* @return: nothing
*/
public void push(int number) {
stack.push(number);
q.offer(number);
}
/*
* @return: An integer
*/
public int pop() {
int num = stack.pop();
q.remove(num);
return num;
}
/*
* @return: An integer
*/
public int min() {
return q.peek();
}
}