定义栈的数据结构,
请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,
调用 min、push 及 pop 的时间复杂度都是 O(1)。
min()
调用时可以直接获取pop()
是最小值,将最小值抛出后,无法找到新的最小值class MinStack {
public:
stack<int> mainStack;
stack<int> minStack;
/** initialize your data structure here. */
MinStack() {
while(!mainStack.empty()) mainStack.pop();
while(!minStack.empty()) minStack.pop();
}
void push(int x) {
mainStack.push(x);
if (!minStack.empty() && minStack.top() < x) // 当最小值栈为空,或者当前塞入的值不是最小值时,更改x为最小值
x = minStack.top();
minStack.push(x);
}
void pop() {
mainStack.pop();
minStack.pop();
}
int top() {
return mainStack.top();
}
int min() {
return minStack.top();
}
};
多出了一个栈的空间,空间复杂度变为`O(n)`
原文:https://www.cnblogs.com/forever-snow/p/15145811.html