思想
- min值的保存:不能简单的通过基本数据类型解决,因为一旦当前最小值出栈,第二小,第三小的如何知道,替代为当前最小值?——用栈保存目前最小值,元素与当前最小值相等时同进同出。
- 比较数字大小是,能用equals,就用equals,替换== 。如果不是八中基本数据类型int,char等,==比较的是地址!
Java代码
class MinStack {
Stack<Integer> s;
Stack<Integer> s2;
public MinStack() {
s = new Stack<>();
s2 = new Stack<>();
}
public void push(int x) {
s.push(x);
if((!s2.isEmpty()) && (s2.peek() < x)){
return;
}else{
s2.push(x);
}
}
public void pop() {
if(s.isEmpty()){
return;
}
if((s2.peek()).equals(s.pop()))
s2.pop();
}
public int top() {
if(s.isEmpty()){
return -1;
}
return s.peek();
}
public int min() {
if(s2.isEmpty())
return -1;
return s2.peek();
}
}