包含min函数的栈
包含min函数的栈
问题陈述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
思路分析
普通栈的push和pop操作的时间复杂度为O(1),但是获取min则需要遍历一遍,复杂度为O(n)。
如此,我们考虑使用一个辅助栈来实现。
主栈:用于存储所有元素,实现正常的出入栈操作,获取栈顶元素等。
辅助栈:用于另存入主栈元素出现的最小元素,如先存入第一个入主栈元素,后面入栈元素依次与之比较,若更小,则继续存入,确保最小元素永远在辅助栈的栈顶。
代码实现
1 | public class Min_Stack { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 淋竹调!
评论