《iOS劍指Offer》 面試題31 棧的壓入,彈出序列

題目描述

輸入兩個(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è)序列的長度是相等的)

思路

按棧的壓入順序進(jìn)行入棧,每入棧一次都要與出棧順序的棧頂元素進(jìn)行比較,如果與出棧元素不相等則繼續(xù)入棧,直到與棧頂元素比較后相等,則出棧棧頂元素,同時(shí)出棧順序移到下一位單元

如果遍歷完出棧順序的每個(gè)單元后棧為空,則壓入與彈出順序一一對(duì)應(yīng) 否則不對(duì)應(yīng)。

推薦閱讀:iOS開發(fā)——BAT面試題合集(持續(xù)更新中)

作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流群:638302184,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長!

源代碼

class Solution {
public:
    
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int pushSize = pushV.size();
        int popSize = popV.size();
        int flag = 0;
        if (pushSize != popSize || pushSize == 0 || popSize == 0) {
            return false;
        }
        int start = 0;
        int end = popSize - 1;
        stack <int> assistStack;
        stack <int> stack;
        for (int i = 0; i < popSize; i++) {
            stack.push(pushV[i]);
            while (!stack.empty() && popV[start] == stack.top()) {
                stack.pop();
                start++;
            }
            
        }
        return stack.empty();
    }
};

作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流裙:638302184,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容