最小栈实现
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
public class MinStack {
private Stack<Integer> s;
private List<Integer> l;
private int min;
public MinStack() {
s=new Stack<Integer>();
l=new ArrayList<Integer>();
min=Integer.MIN_VALUE;
}
public void push(int x) {
if(s.isEmpty()||min>=x)
{
l.add(x); //依次记录最小元素
min=x;
}
s.push(x);
}
public void pop() {
if(!s.isEmpty()&&!l.isEmpty())
{
if(l.get(l.size()-1).equals(s.peek()))
{
l.remove(l.size()-1);
if(l.size()>0)
min=l.get(l.size()-1);
else
min=Integer.MIN_VALUE;
}
s.pop();
}
}
public int top() {
return s.peek();
}
public int getMin() {
if(l.isEmpty())
return 0;
return (l.get(l.size()-1));
}
public static void main(String[] args) {
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
System.out.println(minStack.getMin());
minStack.pop();
System.out.println(minStack.top());
System.out.println(minStack.getMin());
}
}