算法思路:
1、采用两个栈:s1存储正常入栈顺序,s2存储最小值栈
2、当添加数入栈时,先正常入栈s1,然后再根据添加数判断选择值入栈s2:如果添加的数比最小栈栈顶的数小,则将添加数入最小栈, 如果添加的数比最小栈栈顶的数大,则添加最小数入最小栈(即最小栈栈顶元素再入栈)。整个过程中确保s1和s2栈中的个数相同
```java
public class Solution {
//将存储正常入栈结果
Stack<Integer> s1 = new Stack();
//辅助栈,存储最小值,当要往栈中添加数时,将栈顶元素与添加的数比较,如果添加的数比较小,
//则将添加的数入最小栈,如果栈顶的数字比较小,则添加最小栈栈顶的元素
Stack<Integer>s2 = new Stack();
public void push(int node) {
s1.push(node);
if(s2.isEmpty()){
s2.push(node);
}else{
if(node<s2.peek()){
s2.push(node);
}else{
s2.push(s2.peek());
}
}
}
public void pop() {
if(!s1.isEmpty()){
s1.pop();
s2.pop();
}
}
public int top() {
if(!s1.isEmpty()){
return s1.peek();
}
return -1;
}
public int min() {
if(!s2.isEmpty()){
return s2.peek();
}
return -1;
}
}