欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

設計包含min函數的棧

系統 2177 0

要求

定義棧的數據結構,要求添加一個min 函數,能夠得到棧的最小元素。?

要求函數min、push 以及pop 的時間復雜度都是O(1)。


解法1:

?

使用一個輔助棧來保存最小元素,這個解法簡單不失優雅。設該輔助棧名字為minimum stack,其棧頂元素為當前棧中的最小元素。這意味著

?

  • 要獲取當前棧中最小元素,只需要返回minimum stack的棧頂元素即可。
  • 每次執行push操作,檢查push的元素是否小于或等于minimum stack棧頂元素。如果是,則也push該元素到minimum?stack中。
  • 當執行pop操作的時候,檢查pop的元素是否與當前最小值相等。如果相同,則需要將改元素從minimum?stack中pop出去。
    struct minStack{

    stack<int> s;

    stack<int> minS;



    void push(int i){

        if (s.empty() || minS.empty()){

            s.push(i);

            minS.push(i);

        }else{

            if (minS.top() >= i){

                minS.push(i);

            }

            s.push(i);

        }

    }



    void pop(){

        if (s.empty() || minS.empty()){

            return;

        }

        if (s.top() > minS.top()){

            s.pop();

        }else{

            s.pop();

            minS.pop();

        }

    }



    int min(){

        if (minS.empty())

            return -1;

        else 

            return minS.top();

    }

};


  

?

2.巧妙解法

?

另外一種解法利用存儲差值而不需要輔助棧,方法比較巧妙。其中需要說明的幾點:

push(int elem)函數在棧中壓入當前元素與當前棧中最小元素的差值,然后通過比較當前元素與當前棧中最小元素大小,并將它們中間的較小值壓入。

pop()函數執行的時候,先pop出棧頂的兩個值,這兩個值分別是當前棧中最小值min和最后壓入的元素與棧中最小值的差值diff。如果diff<0,則表示最后壓入棧的元素是最小的元素,因此只需將min-diff壓入棧中,并將min值返回即可。min-diff就是當前元素彈出后,棧中剩下元素的最小值。而如果diff>=0且棧不為空,則表示當前值不是最小值,所以需要在棧中壓入最小值min并將diff+min返回;如果棧為空,則表示已經是最后一個數字,直接返回min即可。

?

    struct minStackLessSpace{

    

    void push(int i){

        if (s.empty()){

            s.push(i);

            s.push(i);

        }

        if (i - s.top() < 0){

            s.pop();

            s.push(i-s.top());

            s.push(i);

        }else{

            int j = s.top();

            s.pop();

            s.push(i);

            s.push(j);

        }

    }



    bool pop(){

        if (s.empty())

            return false;

        int i = s.top();

        s.pop();

        if (s.top() < 0){

            int j = s.top();

            s.pop();

            s.push(i - j);

        }else{

            s.pop();

            s.push(i);

        }

    }

    

    stack<int> s;

};
  


參考:

?

http://blog.csdn.net/ssjhust123/article/details/7752878


設計包含min函數的棧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲精品久久久极品美女 | 日韩欧美在线中文字幕 | 97成人网在线碰碰碰 | 国产一区免费 | 夜夜操狠狠干 | 高清久久 | www.尤物视频.com | ccyy草草影院 | 欧美系列在线播放 | 日本黄a | 亚洲精品AV无码喷奶水糖心 | 一区二区三区在线观看免费 | 91视频综合网 | 国产精品吹潮在线观看中文 | 牛票票全部晒票 | 天天影院 | 国产亚洲欧美日本一二三本道 | 亚洲欧美在线免费观看 | 中文字幕伊人久久网 | 免费中文字幕 | 国产日韩一区二区三区在线观看 | 色婷婷久久久久swag精品 | 国产精品福利短视在线播放频 | 波多野结衣手机在线播放 | 91精品国产91久久久久久吃药 | 亚洲人成一区二区三区 | 一级视频在线播放 | 欧美 日韩 | 久久99国产精品 | 嫩草影院网影院在线 | 欧美日韩在线观看精品 | 国产精品一区二555 欧美在线免费 | 午夜影院在线免费观看视频 | 久久久人成影片免费观看 | 香蕉视频在线看 | 91短视频社区在线观看 | 国产1区2区 | 中国大陆高清aⅴ毛片 | 亚洲国产欧美在线人网站 | 嫩草影院网影院在线 | 国产欧美视频一区二区三区 |