维护两个栈,一个输入栈,一个辅助栈,辅助栈用于存储当前栈中的最小值。
因为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();
}
}
京公网安备 11010502036488号