思路:
使用两个栈,一个主栈存放数据,另一个辅助栈存放最小值,每次push数据时先与辅助栈栈顶元素进行比较,如果小于或等于辅助栈栈顶元素则在push进主栈同时push进辅助栈。要注意在pop删除主栈元素时要同时判断辅助栈栈顶元素是否和主栈栈顶元素相等,相等则同时pop删除,否则原有的最小值不会被删除。
实现:
import java.util.Stack;
public class Solution {
private Stack<Integer> stack1 =new Stack<Integer>();
private Stack<Integer> stack2 =new Stack<Integer>();
public void push(int node) {
stack1.push(node);
if(stack2.empty()||node<=stack2.peek())stack2.push(node);
}
public void pop() {
if(stack1.peek()==stack2.peek())stack2.pop();
stack1.pop();
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}