實現一個棧Stack,要求實現Push(出棧)、Pop(入棧)、 Min(返回最小值的操作)的時間複雜度為O(1)
阿新 • • 發佈:2019-02-08
利用兩個棧
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;
};