Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) – Push element x onto stack.
- pop() – Removes the element on top of the stack.
- top() – Get the top element.
- getMin() – Retrieve the minimum element in the stack.
本题的重点在于如何在O(1)的时间内或得到栈中的最小元素
其解法便是单独建立一个存储栈中最小元素的最小元素栈(minstack)
代码如下
class MinStack {
public:
void push(int x) {
stack[++stop] = x;
if (mtop == -1 || x <= minstack[mtop])
minstack[++mtop] = x;
}
void pop() {
if (stack[stop] == minstack[mtop])
mtop--;
stop--;
}
int top() {
return stack[stop];
}
int getMin() {
return minstack[mtop];
}
private:
int stack[102400]; //elem stack
int minstack[102400]; //min elem stack
int min;
int stop = -1;
int mtop = -1;
};