1. 程式人生 > >實現一個棧Stack,要求實現Push(出棧)、Pop(入棧)、 Min(返回最小值的操作)的時間複雜度為O(1)

實現一個棧Stack,要求實現Push(出棧)、Pop(入棧)、 Min(返回最小值的操作)的時間複雜度為O(1)

利用兩個棧
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; };