1. class MinStack {
    2. /** initialize your data structure here. */
    3. /**
    4. 思路:辅助栈方法
    5. 1.在创建栈的时候,创建两个栈,一个数据栈,一个最小值栈
    6. 2.在执行push的时候,先在数据栈中入栈,然后在最小值栈中放入最小元素
    7. 3.最小元素的意思是,如果执行了入栈操作,那么就对比最小值栈的栈顶元素和要入栈元素的大小
    8. 如果小于等于栈顶元素,则入栈,如果不小于,则不入栈
    9. 4.获取最小值的时候,直接执行辅助栈的peek操作
    10. */
    11. private Stack<Integer> data;
    12. private Stack<Integer> min_stack;
    13. public MinStack() {
    14. // 存数据
    15. data = new Stack();
    16. // 存最小值
    17. min_stack = new Stack();
    18. }
    19. // 当最小值栈的栈顶元素大于等于val的时候才执行入栈,数据直接入data栈
    20. public void push(int val) {
    21. data.push(val);
    22. if(min_stack.isEmpty() || min_stack.peek() >= val){
    23. min_stack.push(val);
    24. }
    25. }
    26. // 当最小值栈的栈顶元素和数据栈一致的时候,都出栈
    27. // 当data栈的元素大于最小值栈的栈顶元素的时候,就data出栈
    28. public void pop() {
    29. if(data.pop().equals(min_stack.peek()))
    30. min_stack.pop();
    31. }
    32. public int top() {
    33. return data.peek();
    34. }
    35. public int getMin() {
    36. return min_stack.peek();
    37. }
    38. }
    39. /**
    40. * Your MinStack object will be instantiated and called as such:
    41. * MinStack obj = new MinStack();
    42. * obj.push(val);
    43. * obj.pop();
    44. * int param_3 = obj.top();
    45. * int param_4 = obj.getMin();
    46. */