题目描述:
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
其中:
push(x) :将元素 x 推入栈中。
pop() : 删除栈顶的元素。
top() :获取栈顶元素。
getMin() : 检索栈中的最小元素。
参考代码:
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
/** initialize your data structure here. */
public MinStack() {
this.stack = new Stack<>();
this.minStack = new Stack<>();
}
public void push(int val) {
stack.push(val);
if (minStack.empty()){
//最小栈没有元素
minStack.push(val);
}else {
//最小栈内有元素,拿到栈顶元素和val比较
int top = minStack.peek();
if (val <= top){
minStack.push(val);
}
}
}
//删除栈顶元素
public void pop() {
if (!stack.isEmpty()){
int tmp = stack.pop();
if (tmp == minStack.peek()){
minStack.pop();
}
}
}
//拿到栈顶元素不删除
public int top() {
if (stack.empty()){
return -1;
}
return stack.peek();
}
public int getMin() {
if (minStack.empty()){
return -1;
}
return minStack.peek();
}
}
运行截图: