最小栈
最小栈
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minstack;
public MinStack() {
stack=new Stack<>();
minstack=new Stack<>();
}
public void push(int val) {
stack.push(val);
if(minstack.empty()){
minstack.push(val);
}else{ //=要加上,否则stack中此数有多个 出栈时minstack也要出栈 数不够只有一个
if(val<=minstack.peek()){
minstack.push(val);
}
}
}
public void pop() {
if(!stack.empty()){
int ret=stack.pop();
if(minstack.peek()==ret){
minstack.pop();
}
}
}
//获取正常栈顶元素
public int top() {
if(stack.empty()){
return -1; //oj题中轻易不要抛出异常 直接return-1即可
}
return stack.peek();
}
//获取最小栈顶元素
public int getMin() {
if(minstack.empty()){
return -1;
}
return minstack.peek();
}
}