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