https://oj.leetcode.com/problems/min-stack/
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
算法如下:
1.data_stack和普通stack没什么两样,该push就push,该pop就pop,该top就top。没区别
2.min_stack只在以下两个情况下push:1.空。这个时候任意值必然都是最小值,因为没有数据。2.当前push的值小于等于min_stack的top。这个时候最小值需要更新。所以需要压栈min_stack。
3.min_stack只在以下一种情况下pop:data_stack pop的值等于当前min_stack的top。因为data_stack中当前最小值被移走了,所以min_stack也要相应pop掉。
根据以上三个原则,给出代码如下:
Stack<Integer> data = new Stack<Integer>();
Stack<Integer> min = new Stack<Integer>();
public void push(int x) {
data.push(x);
if(min.isEmpty() || min.peek() >= x)
min.push(x);
}
public void pop() {
int pop = data.pop();
if(!min.isEmpty() && pop == min.peek())
min.pop();
}
public int top() {
return data.peek();
}
public int getMin() {
return min.peek();
}