分析:
要求时间复杂度push,pop,min都是O(1),我们可以把每次的最小元素(之前的最小元素和新压入栈的元素两者的较小值)都保存起来放入另一个辅助栈中。如果每次都把最小元素压入辅助栈,那么能保证辅助栈的栈顶一直都是最小元素,当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。
//建立一个额外的栈,用空间换取时间
class Solution {
private:
stack<int>st1;
stack<int>minnum2;
public:
Solution()
{
while(!st1.empty()) st1.pop();
while(!minnum2.empty()) minnum2.pop();
}
~Solution()
{
}
void push(int value) {
st1.push(value);
if(minnum2.empty()) {
minnum2.push(value);
return;
}
if(minnum2.top()>value) minnum2.push(value);
else minnum2.push(minnum2.top());
}
void pop() {
if(!st1.empty())
{
st1.pop();
minnum2.pop();
}
}
int top() {
if(!st1.empty()) return st1.top();
}
int min() {
if(!minnum2.empty()) return minnum2.top();
}
};