用两个栈,stack用来存所有的元素,getMin用来存加入新的元素后当前栈中对应的最小值。
两个栈中的元素数量始终保持一致,当新的元素小于栈顶元素时,向getMin栈顶push新来的元素,否则,向getMin栈顶加入原栈顶元素。
执行“pop”方法时,两个栈同时弹出各自的栈顶元素。
public Stack<Integer> stack = new Stack<>();
public Stack<Integer> getMin = new Stack<>();
public void push(int node) {
if (stack.empty()) {
getMin.push(node);
stack.push(node);
return;
}
if (node<getMin.peek()) {
getMin.push(node);
stack.push(node);
}else {
getMin.push(getMin.peek());
stack.push(node);
}
}
public void pop() {
if (stack.empty()) {
return;
}
stack.pop();
getMin.pop();
}
public int top() {
if (stack.empty()) {
return -1;
}
return stack.peek();
}
public int min() {
if (getMin.empty()) {
return -1;
}
return getMin.peek();
}