最小スタック実現
11640 ワード
一番小さいスタックは、push、pop、top操作をサポートする設計を実現し、定数時間内に最小要素のスタックを検索することができます.
push(x)–元素xをスタックに押し込む.pop()–スタックトップの要素を削除します.top()–スタックトップ要素を取得します.get Min()–スタックの最小要素を検索します.
push(x)–元素xをスタックに押し込む.pop()–スタックトップの要素を削除します.top()–スタックトップ要素を取得します.get Min()–スタックの最小要素を検索します.
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());
}
}