思路:由于要求是O(1)的复杂度,那么得多用一个栈来维护最小值,当加入新值时,若比最小值栈的top更小,那么两个栈都需要push,否则只有第一个栈push。在pop值时,若第一个栈的top与最小值栈top相等,那么都得pop,否则只需pop第一个栈,当然我们得先判断栈非空。
class Solution {
private:
stack<int> s1,s2;
public:
void push(int value) {
s1.push(value);
if(s2.empty()||value<s2.top()) s2.push(value);
}
void pop() {
if(!s1.empty()&&!s2.empty())
if(s1.top()== s2.top()) s2.pop();
s1.pop();
}
int top() {
return s1.top();
}
int min() {
return s2.top();
}
};