维护两个栈,一个输入栈,一个辅助栈,辅助栈用于存储当前栈中的最小值。
因为pop一定是从栈顶出栈的,所以在辅助栈中后入栈的最小值影响不到先入栈的最小值。
出栈时,输入栈和辅助栈一起出,因为辅助栈栈顶的最小值是相对于输入栈栈顶而言的。
import java.util.*; import java.util.Stack; import java.util.ArrayList; public class Solution { /** * return a array which include all ans for op3 * @param op int整型二维数组 operator * @return int整型一维数组 */ Stack<Integer> stackA=new Stack<Integer>(); Stack<Integer> stackMin=new Stack<Integer>(); ArrayList<Integer> tmp = new ArrayList<>(); public int[] getMinStack (int[][] op) { // write code here for(int[] arr : op){ if(arr[0]==1){ push(arr[1]); } else if(arr[0]==2){ pop(); } else{ int min=getMin(); tmp.add(min); } } int[] result=new int[tmp.size()]; for(int i=0;i<result.length;i++){ result[i]=tmp.get(i); } return result; } public void push(int value){ stackA.push(value); if(stackMin.isEmpty()){ stackMin.push(value); } else{ stackMin.push(stackMin.peek()>=value ? value : stackMin.peek()); } } public void pop(){ stackA.pop(); stackMin.pop(); } public int getMin(){ return stackMin.peek(); } }