题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 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.
定义两个栈,一个栈用于存储压入的所有数据,另一个栈用于存储栈中的最小元素。栈的基本操作就不细说了,对于最小栈,当最小栈为空时,需要压入元素,或者当压入的元素小于当前最小栈的栈顶元素时,将该元素压入栈中。弹出元素时,当弹出元素与最小栈中的栈顶元素相等时需要将最小栈的栈顶元素弹出。
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
stack<int> stk;
stack<int> minstk;
void push(int val) {
stk.push(val);
if(!minstk.size() || minstk.top()>=val) minstk.push(val);
}
void pop() {
int t = stk.top();stk.pop();
if(minstk.top()==t) minstk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return minstk.top();
}
};