解题思路:在比较中,采用一个新栈保存原栈中的值。注意在栈的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; } }