class MinStack { /** initialize your data structure here. */ /** 思路:辅助栈方法 1.在创建栈的时候,创建两个栈,一个数据栈,一个最小值栈 2.在执行push的时候,先在数据栈中入栈,然后在最小值栈中放入最小元素 3.最小元素的意思是,如果执行了入栈操作,那么就对比最小值栈的栈顶元素和要入栈元素的大小 如果小于等于栈顶元素,则入栈,如果不小于,则不入栈 4.获取最小值的时候,直接执行辅助栈的peek操作 */ private Stack<Integer> data; private Stack<Integer> min_stack; public MinStack() { // 存数据 data = new Stack(); // 存最小值 min_stack = new Stack(); } // 当最小值栈的栈顶元素大于等于val的时候才执行入栈,数据直接入data栈 public void push(int val) { data.push(val); if(min_stack.isEmpty() || min_stack.peek() >= val){ min_stack.push(val); } } // 当最小值栈的栈顶元素和数据栈一致的时候,都出栈 // 当data栈的元素大于最小值栈的栈顶元素的时候,就data出栈 public void pop() { if(data.pop().equals(min_stack.peek())) min_stack.pop(); } public int top() { return data.peek(); } public int getMin() { return min_stack.peek(); }}/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(val); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */