一、题目
请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。
二、解题思路
使用最小值栈来记录每次插入一个值时,该栈的最小值。当栈弹出一个元素时,最小值栈顶元素也要弹出。
三、代码
class MinStack {
Deque<Integer> stack;
Deque<Integer> min;//记录当前栈的最小值
/** initialize your data structure here. */
public MinStack() {
stack=new LinkedList<Integer>();
min=new LinkedList<Integer>();
min.add(Integer.MAX_VALUE);//最小值栈初始化
}
public void push(int x) {
stack.push(x);
int num=Math.min(x, min.peek());//记录此时栈的最小值
min.push(num);
}
//出栈,最小值栈与栈要同时弹出
public void pop() {
stack.pop();
min.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return min.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/
四、运行结果