题目描述
设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。
- push(x)–将元素x插入栈中
- pop()–移除栈顶元素
- top()–得到栈顶元素
- getMin()–得到栈中最小元素
样例
MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin(); --> Returns -4.
minStack.pop();
minStack.top(); --> Returns 3.
minStack.getMin(); --> Returns -1.
算法
(用数组模拟即可) $O(n)$
用 $a$ 数组模拟栈,$t$ 记录栈的元素个数,$b$ 数组中 $b_i$ 记录前 $i$ 个数中的最小值
时间复杂度 $O(n)$
C++ 代码
class MinStack {
public:
int t, a[110], b[110];
MinStack() {
t = 0, b[0] = 2e9;
}
void push(int x) {
t++, a[t] = x, b[t] = min(b[t - 1], x);
}
void pop() {
b[t--] = 2e9;
}
int top() {
return a[t];
}
int getMin() {
return b[t];
}
};