/*
建立兩個棧 分別存放正常的數據和最小的數據,用來存放最小數據的棧 每一層都存放上一層最小與新存放數中最小的那個,
*/
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();
}
}