问题:用两个栈实现最小栈
思路:一个栈作为普通栈,一个栈作为最小栈,一个元素入普通栈,如果最小栈为空,这个元素也入最小栈,如果最小栈不为空,比较这个元素和最小栈栈顶的元素大小,如果小于则入最小栈,否则不入。出栈时,比较出栈元素和最小栈栈顶元素是否相等,如果相等则出最小栈,如果不相等,则不出最小栈。
代码:
import java.util.Stack;
class MinStack{
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack(){
stack=new Stack<>();
minStack=new Stack<>();
}
public void push(int x){
stack.push(x);
if(minStack.empty()){
minStack.push(x);
}else{
int tmp=minStack.peek();
if(x<=tmp){
minStack.push(x);
}
}
}
public int pop(){
int tmp=stack.pop();
if(tmp==minStack.peek()){
minStack.pop();
}
return tmp;
}
public int top(){
return stack.peek();
}
public int getMin(){
return minStack.peek();
}
}
public class TestDemo {
public static void main(String[] args) {
MinStack stack=new MinStack();
stack.push(1);
stack.push(2);
stack.push(0);
System.out.println(stack.getMin());//0
System.out.println(stack.pop());//0
System.out.println(stack.getMin());//1
}
}