1. 题目
![在这里插入图片描述](https://img-blog.csdnimg.cn/6e4ccc885ac747b7bbf1f817529807de.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zi_6LSi57un57ut5Yqq5Yqb,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2. 思路
(1) 辅助栈
- 利用stack1存储所有元素,stack2对应stack1中的元素存储当前stack1中的最小元素。
(2) 数组
- 与(1)的思想基本相同,利用长度为2的数组代替两个栈,功能与(1)相同。
3. 代码
import java.util.Deque;
import java.util.LinkedList;
public class Test {
public static void main(String[] args) {
}
}
class MinStack {
private Deque<Integer> stack1;
private Deque<Integer> stack2;
public MinStack() {
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
stack2.push(Integer.MAX_VALUE);
}
public void push(int val) {
stack1.push(val);
stack2.push(Math.min(stack2.peek(), val));
}
public void pop() {
stack1.pop();
stack2.pop();
}
public int top() {
return stack1.peek();
}
public int getMin() {
return stack2.peek();
}
}
class MinStack1 {
private Deque<int[]> stack;
public MinStack1() {
stack = new LinkedList<>();
}
public void push(int val) {
if (stack.isEmpty()) {
stack.push(new int[]{
val, val});
} else {
stack.push(new int[]{
val, Math.min(val, getMin())});
}
}
public void pop() {
stack.pop();
}
public int top() {
return stack.peek()[0];
}
public int getMin() {
return stack.peek()[1];
}
}