解题思路:在比较中,采用一个新栈保存原栈中的值。注意在栈的pop,push操作中,stack.size()是变化的,不要将其作为边界条件。

import java.util.*;
import java.lang.*;


public class Solution {
    /**
     * return a array which include all ans for op3
     * @param op int整型二维数组 operator
     * @return int整型一维数组
     */
    public int[] getMinStack (int[][] op) {
        // write code here
        Stack<Integer> s=new Stack<>();
        ArrayList<Integer> answer=new ArrayList<>();
        for(int i=0;i<op.length;i++){
            if(op[i].length==2){
                s.push(op[i][1]);
            }
            else{
                switch(op[i][0]){
                    case 2:
                        s.pop();
                        break;
                    case 3:
                        if(!s.isEmpty()){
                            answer.add(getMin(s));
                        }
                        break;
                    default:
                        break;
                }
            }
        }
        return answer.stream().mapToInt(Integer::valueOf).toArray();
    }
    public Integer getMin(Stack<Integer> s){
        Integer min=s.peek();
        int n=s.size();
        Stack<Integer> stack=new Stack<>();
        for(int i=0;i<n;i++){
            stack.push(s.pop());
            if((stack.peek()).intValue()<min.intValue()){
                min=stack.peek();
            }
        }
        for(int i=0;i<n;i++){
            s.push(stack.pop());
        }
        return min;
    }
}