原题链接
相关题目,相关数据结构及其设计思路:设计一个能够获得最大值的队列
一个能够返回最小值的栈
/**
* @author 49367
* @date 2021/4/8 20:58
*/
public class GetMinStackNC90 {
/*
利用栈先进后出的特性。
*/
private Deque<Integer> dataStack = new LinkedList<>();
private Deque<Integer> minStack = new LinkedList<>();
public void push(int val){
dataStack.addLast(val);
if(minStack.isEmpty() || val <= minStack.peekLast())
minStack.addLast(val);
}
public void pop(){
Integer rmVal = dataStack.removeLast();
if(rmVal.equals(minStack.peekLast()))
minStack.removeLast();
}
public Integer getMin(){
return minStack.peekLast();
}
/**
* return a array which include all ans for op3
* @param op int整型二维数组 operator
* @return int整型一维数组
*/
public int[] getMinStack (int[][] op) {
// write code here
List<Integer> resList = new ArrayList<>();
int len = op.length;
if(len <= 0) return new int[0];
for (int i = 0; i < len; i++){
int operation = op[i][0];
if(operation == 1){
push(op[i][1]);
} else if(operation == 2 && !dataStack.isEmpty()){
pop();
} else {
resList.add(getMin());
}
}
int size = resList.size();
int[] resArray = new int[size];
int i = 0;
for (Integer resVal : resList) {
resArray[i++] = resVal;
}
return resArray;
}
}