题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
示例 1:
输入:
"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.
题解
java
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> min_stack;
public MinStack() {
stack = new Stack<>();
min_stack = new Stack<>();
}
public void push(int x) {
stack.push(x);
if(min_stack.isEmpty() || x <= min_stack.peek())
min_stack.push(x);
}
public void pop() {
if(stack.pop().equals(min_stack.peek()))
min_stack.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return min_stack.peek();
}
}
解析
java
class MinStack {
private Stack<Integer> stack; //定义一个名为stack的栈,用于保存所有的输入数字。
private Stack<Integer> min_stack; //定义另一个名为min_stack的栈,用于跟踪到目前为止遇到过的最小值。
public MinStack() { //构造方法,初始化两个栈。
stack = new Stack<>();
min_stack = new Stack<>();
}
public void push(int x) { //push方法:将一个数字添加到数据结构中。如果这个数字小于或等于当前最小值,也将它压入min_stack栈。
stack.push(x);
if(min_stack.isEmpty() || x <= min_stack.peek())
min_stack.push(x);
}
public void pop() { //pop方法:从数据结构中移除最近添加的数字。如果被删除的数字等于当前最小值,也要将min_stack栈顶元素也弹出。
if(stack.pop().equals(min_stack.peek()))
min_stack.pop();
}
public int top() { //top方法:返回最近添加的数字,但不将其删除。它只是查找栈顶元素。
return stack.peek();
}
public int getMin( ) { //getMin方法:找到并返回目前为止遇到过的所有数字中的最小值。这个最小值始终在min_stack的栈顶位置,因此可以直接调用它的`peek()`函数来获取它。
return min_stack.peek();
}
}