輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,第二個(gè)序列表示是否為該棧 的彈出順序。假設(shè)壓入的所有數(shù)字均不相等。如:壓棧順序:1,2,3,4,5 判斷彈出序列可以為4,5,3,2,1或者4,3,5,1,2
沒看懂什么意思,彈出順序不是5 4 3 2 1 嘛?
解釋下棧的壓入和彈出:比如操作數(shù)組,壓入就是push進(jìn)去,彈出就是pop。
如:壓棧順序:1,2,3,4,5 判斷彈出序列可以為4,5,3,2,1或者4,3,5,1,2
第一個(gè):(成立)
1,2,3,4入棧,4出棧 彈出4
剩1,2,3 這時(shí)5入棧,棧內(nèi)1,2,3,5 5出棧, 彈出5 棧內(nèi)1,2,3 依次出棧
用代碼實(shí)現(xiàn)就是:
var arr = []
arr.push(1)
arr.push(2)
arr.push(3)
arr.push(4)
arr.pop()
arr.push(5)
arr.pop()
arr.pop()
arr.pop()
arr.pop()
第二個(gè):(比較特殊)
1,2,3,4入棧,4,3出棧
剩1,2 這時(shí)5入棧 棧內(nèi)1,2,5 5出棧 剩1,2 棧底彈出1,2
用代碼實(shí)現(xiàn)就是:
var arr = []
arr.push(1)
arr.push(2)
arr.push(3)
arr.push(4)
arr.pop()
arr.pop()
arr.push(5)
arr.pop()
arr.shift()
arr.shift()
arr還剩[1,2] 無法pop出1,2 除非可以前置arr.shift()這我百度過來的:
例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。
思路:
建立一個(gè)輔助棧s,把序列1,2,3,4,5依次壓入輔助棧s,并按照第二個(gè)序列4,5,3,2,1的順序從輔助棧s中彈出數(shù)字。
先將序列1,2,3,4,5依次壓入棧s,每次壓棧時(shí)都判斷棧s的當(dāng)前棧頂元素跟序列4,5,3,2,1的第一個(gè)元素是否相等。當(dāng)壓入4之后,發(fā)現(xiàn)棧頂元素跟序列4,5,3,2,1的第一個(gè)元素相等。彈出棧s的棧頂元素4,然后將序列4,5,3,2,1中第一個(gè)元素去掉,序列4,5,3,2,1變成序列5,3,2,1。在執(zhí)行上述過程。
import java.util.Stack;
/*
* 輸入兩個(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就不可能是該壓棧序列的彈出序列。
* */
public class q21_stack {
public static void main(String[] args) {
int [] pushA = {1,2,3,4,5,6,7,8};
int [] popA = {7,8,6,4,5,3,2,1};
System.out.println(IsPopOrder(pushA,popA));
}
public static boolean IsPopOrder(int [] pushA,int [] popA)
{
if(pushA.length<=0 || popA.length<=0 )
{
return false;
}
int j=0;
Stack<Integer> s1=new Stack<Integer>();
for(int i=0;i<pushA.length;i++)
{
s1.push(pushA[i]);
if(pushA[i] == popA[j])
{
if(j++==popA.length-1)
{
return true;
}
s1.pop();
}
}
while(!s1.isEmpty())
{
if(s1.pop()!=popA[j++])
{
return false;
}
}
return true;
}
}
意思就是 壓一個(gè)就測一次彈棧序列, LZ 你說的 54321 應(yīng)該是 把 12345 全部壓進(jìn)去后,再彈出的順序,但這個(gè)指的是 邊壓邊彈。
PS: 貼上的 代碼的情況是:序列4,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。
而LZ 你的題意是 45321 可以, 43512 也可以。 那就要修改代碼了!
貼的代碼代碼里面 是放一個(gè) 只判斷 彈出序列第一個(gè),
LZ題意要讓 43512也要成立
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。