一、题目
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
push(x)
—— 将元素 x 推入栈中。pop()
—— 删除栈顶的元素。top()
—— 获取栈顶元素。getMin()
—— 检索栈中的最小元素。
二、思路
使用stack实现栈的基本操作,同时创建一个辅助栈用于存储最小元素。
辅助栈在push的时候,只有辅助栈为空,或者辅助栈栈顶大于等于push的数字时,才向其中加入数据。(保证辅助栈栈顶是最小值)。
辅助栈在pop的时候,只有辅助栈栈顶等于存放数据的栈的栈顶数据时,才pop。(确保推出的是最小值)
三、实现
public class MinStack {
private Stack<Integer> data;
private Stack<Integer> min;
public MinStack() {
this.data = new Stack<>();
this.min = new Stack<>();
}
public void push(int x) {
data.push(x);
if (min.empty() || min.peek() >= x) {
min.push(x);
}
}
public void pop() {
int dataNum = data.pop();
int minNume = min.peek();
if (dataNum == minNume) {
min.pop();
}
}
public int top() {
return data.peek();
}
public int getMin() {
return min.peek();
}
}