实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

有三种操作种类,op1表示push,op2表示pop,op3表示getMin。你需要返回和op3出现次数一样多的数组,表示每次getMin的答案

1<=操作总数<=1000000
-1000000<=每个操作数<=1000000
数据保证没有不合法的操作

import java.util.*;


public class Solution {
    /**
     * return a array which include all ans for op3
     * @param op int整型二维数组 operator
     * @return int整型一维数组
     */
    Stack<Integer> allData;
    Stack<Integer> minData;
    public int[] getMinStack (int[][] op) {
        // write code here
        allData = new Stack<>();
        minData = new Stack<>();
        ArrayList<Integer> res = new ArrayList<>();
        for (int[] option : op) {
            switch(option[0]) {
                case 1:
                    push(option[1]);
                    break;
                case 2:
                    pop();
                    break;
                case 3:
                    int min = getMin();
                    res.add(min);
            }
        }// for

        int[] result = new int[res.size()];
        for (int i = 0; i < result.length; i++) {
            result[i] = res.get(i);
        }
        return result;
    }
    private void push(int num) {
        allData.push(num);
        if (!minData.isEmpty()) {
            minData.push((minData.peek() < num) ? minData.peek() : num);
        }
        else
            minData.push(num);
    }
    private void pop() {
        allData.pop();
        minData.pop();
    }
    private int getMin() {
        return minData.peek();
    }
}