利用两个栈
1. 一个用来存储最小的元素 smin
2. 一个用来存储所有元素 scur
3. 入栈时,scur直接压入,smin栈顶与目标元素比较,若小之则压入,否则不做处理
4. 出栈时,scur直接出栈,smin栈顶与scur栈顶比较,若等之,则出栈,否则不做处理
class Stack
{
public:
void Push(const int& data)
{
if (smin.empty())
{
scur.push(data);
smin.push(data);
}
else
{
if (data<=smin.top())
{
smin.push(data);
}
scur.push(data);
}
}
void Pop()
{
if (smin.empty())
{
return ;
}
if (scur.top()==smin.top())
{
smin.pop();
}
scur.pop();
}
int Min()
{
if (!smin.empty())
{
return smin.top();
}
}
size_t Size()
{
return scur.size();
}
protected:
stack<int> scur;
stack<int> smin;
};