思路:利用一个辅助栈StackMin来存放最小值。
如上图所示:序列3、4、2、5、1依次入栈 -> 辅助栈的栈顶就是最小元素。
每入栈一次,就与辅助栈顶比较:
- 较小就压入辅助栈顶,
- 否则就把原先辅助栈顶元素再压入一次;
class Solution {
public:
void push(int value) {
StackInt.push(value);
if(StackMin.empty())
StackMin.push(value);
else if(StackMin.top()<value)
StackMin.push(StackMin.top());
else
StackMin.push(value);
}
void pop() {
if(!StackInt.empty())
{
StackInt.pop();
StackMin.pop();
}
}
int top() {
return StackInt.top();
}
/*保证辅助栈顶一定是当前栈的最小值*/
int min() {
return StackMin.top();
}
private:
stack<int> StackInt; //当前栈
stack<int> StackMin; //辅助栈
};