方法:辅助栈
这些函数中只有求最小值函数需要借助辅助栈
代码如下:
class MinStack {stack<int> x_stack;stack<int> min_stack;
public:MinStack() {min_stack.push(INT_MAX);}void push(int val) {x_stack.push(val);min_stack.push(min(min_stack.top(), val));}void pop() {x_stack.pop();min_stack.pop();}int top() {return x_stack.top();}int getMin() {return min_stack.top();}
};
复杂度分析
时间复杂度为O(1)。因为栈的插入、删除与读取操作都是 O(1),定义的每个操作最多调用栈操作两次。
空间复杂度:O(n),其中 n 为总操作数。最坏情况下,我们会连续插入 n 个元素,此时两个栈占用的空间为 O(n)。