劍指offer:包含min函數的棧


題目描述:

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間復雜度應為O(1))。

 

解題思路:

相當與在保留原棧的同時,去維護一個最小棧。利用一個輔助棧來完成。對於每個新輸入的數,在壓入原棧的同時,需要去判斷是否為最小值,若為最小指,則壓入輔助棧,否則將當前最小值壓入輔助棧。這樣就相當於兩個棧的大小是相等的,每次做push和pop操作時,二者需要同步。最后的min函數只需要取輔助棧的top就可以。

 

代碼:

class Solution {
public:
    stack<int>cur, min_stack;
    void push(int value) {
        cur.push(value);
        if(min_stack.empty())
            min_stack.push(value);
        else
        {
            if(value < min_stack.top())
                min_stack.push(value);
            else
                min_stack.push(min_stack.top());
        }
    }
    void pop() {
        if(!cur.empty())
        {
            cur.pop();
            min_stack.pop();
        }
        
    }
    int top() {
        if(!cur.empty())
            return cur.top();
        return 0;
    }
    int min() {
        if(!min_stack.empty())
        {
            return min_stack.top();
        }
        return 0;
    }
};

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com