摘要:題目描述輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設(shè)壓入棧的所有數(shù)字均不相等。
題目描述
輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應(yīng)的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
分析其實(shí)該題就是考察一個進(jìn)棧序列能否和一個出棧序列對應(yīng)起來,但是棘手的地方在于:一個進(jìn)棧序列可能會有多個出棧的順序,所以還是得好好想一想。
可以從一個簡單的例子開始:
序列A:1,2,3
序列B:2,3,1
1先進(jìn)棧,B序列中未出棧的第一個數(shù)字是2,說明此時1不能再接著出棧;
2再進(jìn)棧,B序列中未出棧 的第一個數(shù)字是2,說明第一個出棧的數(shù)字是2,那么2就此出棧;
此時棧頂元素為1,B序列中未出棧的第一個數(shù)字是1,說明1是自2出棧后的再一個出棧元素,那么1就此出棧,此時棧為空;
3繼續(xù)進(jìn)棧,此時B序列的中未出棧的第一個數(shù)字是3,說明3是再一個出棧元素,那么3就此出棧,此時棧為空,序列A也全都進(jìn)棧完畢了;
棧空了,序列A也進(jìn)棧完畢了,說明B就是A的彈出序列。
接著這個思路,可以試著寫代碼了
function IsPopOrder(pushV, popV) { if(pushV.length === 0 || popV.length === 0 || pushV.length !== popV.length) return false; // 進(jìn)棧序列和出棧序列分別有一個指針,從頭開始 var curPushIndex = 0, curPopIndex = 0; var stack = []; for(;curPushIndex < pushV.length;curPushIndex++) { stack.push(pushV[curPushIndex]); while(curPopIndex < popV.length && stack[stack.length-1] === popV[curPopIndex]){ // 棧頂元素和當(dāng)前popIndex指向的數(shù)字一樣的話,stack彈出棧頂元素,且當(dāng)前popIndex指向pop序列的下一個數(shù)字 stack.pop(); curPopIndex++; } } // 棧中元素沒有全部彈出,說明兩個序列并不匹配,否則,就是匹配 return stack.length === 0; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95697.html
摘要:題目描述輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。指向壓棧序列的指針指向彈棧序列的指針儲存壓棧序列的輔助空間第一次遍歷把壓棧序列放入輔助空間中如果有相等的就讓彈棧序列指針。 1.題目描述 輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓...
摘要:假設(shè)壓入棧的所有數(shù)字均不相等。注意這兩個序列的長度是相等的思路借助一個輔助棧來存儲數(shù)據(jù)。當(dāng)所有數(shù)據(jù)入棧完成,如果出棧順序正確,那么輔助棧應(yīng)該為空。若存在,左右子樹,遞歸檢測左右子樹是否復(fù)合規(guī)范。 1.包含min函數(shù)的棧 定義棧的數(shù)據(jù)結(jié)構(gòu),請?jiān)谠擃愋椭袑?shí)現(xiàn)一個能夠得到棧中所含最小元素的min函數(shù)(時間復(fù)雜度應(yīng)為O(1))。 思路 1.定義兩個棧,一個棧用于存儲數(shù)據(jù),另一個棧用于存儲每次數(shù)...
摘要:前言數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。方法調(diào)用編寫的程序在進(jìn)行方法函數(shù)調(diào)用時,會完成對方法的壓棧操作,等方法執(zhí)行結(jié)束后,對應(yīng)的會完成對方法的彈棧操作。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本文介紹數(shù)據(jù)結(jié)構(gòu)中的棧的概念、存儲結(jié)構(gòu)、棧的特點(diǎn)以及棧的適用場景,另外會穿插介紹面試中的一些經(jīng)典問題...
摘要:使用棧實(shí)現(xiàn)字符串逆序?qū)⒆址崔D(zhuǎn)用兩個棧實(shí)現(xiàn)隊(duì)列用兩個棧來實(shí)現(xiàn)一個隊(duì)列,完成隊(duì)列的和操作。假設(shè)棧中有個元素,基于簡單數(shù)組實(shí)現(xiàn)的棧。可以看到棧是實(shí)現(xiàn),其實(shí)底層也是用數(shù)組來實(shí)現(xiàn)的。移除此堆棧頂部的對象,并將該對象作為此函數(shù)的值返回。 目錄介紹 01.棧由簡單數(shù)據(jù)實(shí)現(xiàn) 1.1 簡單數(shù)組代碼實(shí)現(xiàn) 1.2 可能出現(xiàn)問題 1.3 性能和局限性 02.棧由動態(tài)數(shù)組實(shí)現(xiàn) 2.1 基于簡單...
摘要:實(shí)際上是一個讓出線程的標(biāo)志遇到會立即返回一個狀態(tài)的。一個簡單的防抖函數(shù)如果定時器存在則清除重新開始定時執(zhí)行缺點(diǎn)只能在最后執(zhí)行,不能立即被執(zhí)行,在某些情況下不適用。假設(shè)壓入棧的所有數(shù)字均不相等。接收數(shù)據(jù)不受同源政策限制。 開始 盡管秋招還沒有拿到offer(好難過),但是一些知識點(diǎn)還是要總結(jié)的,既然自己選了這條路,那就一定要堅(jiān)定不移的走下去...... 注意 new 運(yùn)算符的優(yōu)先級 fu...
閱讀 3272·2023-04-26 02:10
閱讀 2893·2021-10-12 10:12
閱讀 4594·2021-09-27 13:35
閱讀 1532·2019-08-30 15:55
閱讀 1074·2019-08-29 18:37
閱讀 3437·2019-08-28 17:51
閱讀 1969·2019-08-26 13:30
閱讀 1209·2019-08-26 12:09