题目:
设计一个支持 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],[],[],[],[]]
思路:
- 定义一个辅助栈,其栈顶为当前的最小值,以支持获取最小值的getMin操作。
- 栈的初始化,可以用 Deque。别拼错了。
代码:
class MinStack {
/**
栈的初始化,可以用 Deque。别拼错了。
*/
Deque<Integer> dataStack;
Deque<Integer> minStack;
/**
方法:使用辅助栈
-定义一个「数据栈』来支持push、pop、top操作。
-定义一个「辅助栈』,其栈顶为当前的最小值,以支持获取最小值的getMin操作。
*/
public MinStack() {
//初始化
dataStack = new LinkedList<>();
minStack = new LinkedList<>();
//这里需要放一个初始值,不然 peek的时候会报空指针
minStack.push(Integer.MAX_VALUE);
}
public void push(int val) {
//两个栈都要存入数据
dataStack.push(val);
//存放最小数据的栈,要将最小的放在最上面
minStack.push( Math.min( minStack.peek(), val));
}
public void pop() {
dataStack.pop();
minStack.pop();
}
public int top() {
return dataStack.peek();
}
public int getMin() {
return minStack.peek();
}
}