【刷算法】包括min函數的棧

問題形貌

定義棧的數據結構,請在該範例中完成一個能夠獲得棧最小元素的min函數。

剖析

該問題請求完成一個帶有返回當前棧中最小元素功用的數據結構,起首會想到運用一個變量保留當前最小元素的下標,然則細緻一想,假如當前最小元素剛好在棧頂,此時實行pop操縱,那末最小元素會被彈出,新的最小元素又上哪兒找呢?比較暴力的要領是湧現這類狀況時,再遍歷一遍棧就能夠重新獲得最小元素的下標,然則這麼暴力操縱就沒意思了而且時候複雜度很好。

能夠運用雙棧來完成min功用,棧1通例保留元素,棧2保留此時此刻的棧中最小 元素,比如說有元素進棧1,假如該元素小於棧2的棧頂元素,申明新的最小元素就是該進棧元素,不然,最小元素照樣棧2的棧頂元素。

代碼完成

var stack1 = [];
var stack2 = [];

function push(node)
{
    if(stack2.length === 0 && stack1.length === 0){
        stack1.push(node);
        stack2.push(node);
    } else{
        stack1.push(node);
        var stack2Top = stack2[stack2.length-1];
        if(node < stack2Top)
            stack2.push(node)
        else
            stack2.push(stack2Top);
    }
    
}
function pop()
{
    stack2.pop();
    return stack1.pop();
}
function top()
{
    return stack1[stack1.length-1];
}
function min()
{
    return stack2[stack2.length-1];
}
    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015421059
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞