题目链接
https://leetcode-cn.com/problems/min-stack-lcci/
描述
请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复
杂度必须为O(1)。
示例
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 {
Deque<Integer> stack;
Deque<Integer> help;
/** initialize your data structure here. */
public MinStack() {
stack = new LinkedList<>();
help = new LinkedList<>();
}
public void push(int x) {
stack.push(x);
if (help.isEmpty() || x <= help.peek()) {
help.push(x);
}
}
public void pop() {
if (help.peek().equals(stack.pop())) {
help.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return help.peek();
}
}
本篇博客介绍了一种设计数据结构——MinStack,它是一个栈,但额外提供了获取栈中当前最小值的功能。在保持push、pop和top操作时间复杂度为O(1)的同时,MinStack的getMin函数也能在常数时间内返回最小值。示例代码展示了一个使用双栈实现的方案,其中一个栈用于存储所有元素,另一个辅助栈仅存储当前最小值。在push时,如果新元素小于或等于最小值栈的顶部元素,则将其推入最小值栈。在pop时,如果弹出的元素与最小值栈顶部相同,则也从最小值栈中弹出。这样,最小值栈始终保持了最小元素。
1682

被折叠的 条评论
为什么被折叠?



