题目要求:
解决思路:
我们只需要设计一个数据结构,使得每个元素 a 与其相应的最小值 m 时刻保持一一对应。因此我们可以使用一个辅助栈,与元素栈同步插入与删除,用于存储与每个元素对应的最小值。
当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中;
当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出;
在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中。
代码实现:
import java.util.Stack;
public class MinStack {
Stack<Integer> stack;
Stack<Integer> minStack;
public MinStack() {
stack=new Stack<>();
minStack=new Stack<>();
}
public void push(int val) {
stack.push(val);
if(minStack.isEmpty()||stack.peek()<=minStack.peek()) {
minStack.push(val);
}
}
public void pop() {
if(stack.isEmpty()){
return;
}
int topStack=stack.pop();
if(topStack==minStack.peek()) {
minStack.pop();
}
}
public int top() {
if(stack.isEmpty()){
throw new RuntimeException("栈中没有元素");
}
return stack.peek();
}
public int getMin() {
if(minStack.isEmpty()){
throw new RuntimeException("栈中没有元素");
}
return minStack.peek();
}
}
测试:
public static void main(String[] args) {
MinStack min=new MinStack();
//System.out.println(min.getMin());
min.push(0);
min.push(1);
min.push(-1);
min.push(-3);
min.push(-1);
System.out.println(min.getMin());
}