class MinStack { //声明栈 private Stack<Integer> stack; //声明初始最小值为Integer.MAX_VALUE保证第一个push的值必定毕它小则可以设定第一个push的值为最小值 private int min = Integer.MAX_VALUE; /** initialize your data structure here. */
public MinStack() { //新建栈 stack = new Stack<>(); }
public void push(int x) { //判断如果push的值小于等于min值则将之前的最小值入栈,min设置为当前最小值,之后将当前最小值入栈 // >= 中的 等于是为了避免出现相同值的情况 比如 0,1,0 if(min>=x){ stack.push(min); min = x; } stack.push(x); }
public void pop() { //判断pop的值是否和当前最小值相等,如果相等则将上一次push的值设为最小值(因为pop后栈顶元素为上一次入栈的最小值),整体思路就是每次遇到最小值时将上一次的最小值push,之后push当前最小值,pop的时候也是同样,如果pop的值等于最小值则将最小值设置为上一次push入的值,注意pop的时候,只要执行了pop()方法,栈顶元素就出栈了,则当前最小值出栈,此时栈顶元素为上一次push的最小值,所以可以直接设置为最小值(即 min = stack.pop()) if(stack.pop() == min){ min = stack.pop(); } }
public int top() { //打印栈顶元素 return stack.peek(); }
public int getMin() { //直接返回设定的最小值 return min; } }
/** * 忽略这段 * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */