一、问题描述
二、思路
两个栈,一个当前栈data,一个辅助栈m_min,辅助栈用来存储当前的最小值,如果出栈,辅助栈也出栈,栈顶元素始终是当前的最小值。
在入栈时,如果辅助栈为空或者当前值小于辅助栈栈顶元素,则将当前值加入辅助栈;否则将辅助栈的栈顶元素加入辅助栈,表明此次有大于min栈顶数字入栈。以此保证在其中一个最小值出栈时,辅助栈也出栈时,辅助栈还能有一个最小值。
三、代码
class Solution {
public:
stack<int> data;
stack<int> m_min;
void push(int value) {
data.push(value);
if(m_min.size() == 0 || value < m_min.top())
m_min.push(value);
else
m_min.push(m_min.top());
}
void pop() {
data.pop();
m_min.pop();
}
int top() {
return data.top();
}
int min() {
return m_min.top();
}
};