今天登陆力扣网站,做了一道题,要求
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
push(x)
—— 将元素 x 推入栈中。pop()
—— 删除栈顶的元素。top()
—— 获取栈顶元素。getMin()
—— 检索栈中的最小元素。
示列:
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
实际代码:
class MinStack {
private Stack<Integer> mainStack= new Stack<Integer>();
private Stack<Integer> minStack;
/** initialize your data structure here. */
//生成一个栈来储存最小值
public MinStack() {
minStack = new Stack<Integer>();
}
//入栈
public void push(int x) {
//判断是否更新最小值
if(mainStack.isEmpty()||minStack.peek() >= x){
minStack.push(x);
}
//将值插入栈
mainStack.push(x);
}
//出栈,栈不为空才执行
public void pop() {
if(!mainStack.isEmpty()){
// 如果出栈元素和辅助栈站定元素值相等,辅助栈出栈
if (mainStack.pop().equals(minStack.peek())) {
minStack.pop();
}
}
}
//获取栈顶元素
public int top() {
return mainStack.peek();
}
//获取最小值元素
public int getMin() {
return minStack.peek();
}
}