棧的壓入、彈出序列

2018/10/15
??環(huán)境:牛客的編譯環(huán)境
??語言:JavaScript
??難點(diǎn):想不到怎么去做這個(gè)題,思考了一個(gè)小時(shí)后看了討論..
??題目:輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否可能為該棧的彈出順序。假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個(gè)序列的長度是相等的)
??思路:設(shè)置一個(gè)新數(shù)組,按照壓棧的順序,每次壓入一個(gè),就判斷該數(shù)組最后一個(gè)數(shù)和出棧隊(duì)列的當(dāng)前索引指的值是否相同(索引從0開始),如果相同,則彈出,直到不同時(shí),繼續(xù)壓入。
等壓完后,判斷新數(shù)組的長度是否為0,如果元素都彈出去,則說明彈出序列可行。
??代碼:

function IsPopOrder(pushV, popV)
{
    // write code here
    var tmp = [];
    for(var i = 0,j = 0; i < pushV.length;){
        tmp.push(pushV[i++]);
        while(j < popV.length && tmp[tmp.length - 1] == popV[j]){
            tmp.pop();
            j++;
        }
    }
    return tmp.length == 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。