用一个记录当前最小值的栈mins作为辅助,如果新入栈的数小于等于(因为可能有重复数值,所以取等号)mins.top或者mins是空的,则两个栈一起入栈。
随后出栈时如果出的是当前最小值,则两个栈一起出栈。
class MinStack { public: stack<int> s, mins; public: /** initialize your data structure here. */ MinStack() { } void push(int x) { s.push(x); if (mins.empty() || mins.top()>=x) mins.push(x); } void pop() { if (mins.top() == s.top()) mins.pop(); s.pop(); } int top() { return s.top(); } int min() { return mins.top(); } };