思路:创建两个栈,一个是原始数据,一个存最值的栈,
添加最值栈时候,判断是否比当前最值栈的栈顶值大或者小,根据最值,是否加入新值还是原来值。
最后返回最值
public class SpecialStack {
Stack<Integer> stack = new Stack<>();
Stack<Integer> min = new Stack<>();
public void push(int val){
//如果两个栈都为空,那么都为最值
if(stack.empty()&&min.empty()){
stack.push(val);
min.push(val);
}else {
stack.push(val);
//根据栈顶值和新加入的值,比较,判断是否添加
min.push(min.peek()>val?val:min.peek());
}
}
public Integer pop(){
Integer pop = stack.pop();
min.pop();
return pop;
}
public Integer getMin(){
return min.peek();
}
public static void main(String[] args) {
SpecialStack specialStack = new SpecialStack();
specialStack.push(1);
specialStack.push(-9);
specialStack.push(0);
specialStack.push(-1);
System.out.println(specialStack.getMin());
}
}