作好此題的關鍵在於讀懂題目的意思,作了部分題目後發現,該題屬於一個不易理解的題目,如今用俗話來解釋一下。兩個內容是同樣,但順序不一樣的序列,其中一個是入棧,一個是出棧,(能夠邊入邊出),讓你判斷一下,出棧的那個對應的究竟是不是入棧的那個。看下圖,實例化解釋一下。spa
假設,我入棧的序列是1,2,3,4,5,我能夠經過以上的步驟彈出4,5,3,2,1。這就說明4,5,3,2,1是剛纔那個棧的彈出序列。那咱們在舉個反例!看下圖。code
假設,你壓入的是1,2,3,4,5,這時候你想彈出4,3,5,1,2,這個時候呢,你操做一下,是絕對沒法輸出4,3,5,1,2,極限也就輸出個4,3,5,2,1,(這是和棧的特性掛鉤的)。blog
所以,談論一下具體的操做步驟,首先兩個序列是給定的(假設一個叫彈入序列,一個叫彈出序列),先看看彈出序列的第一個數是什麼,由於棧的特性是先進後出,這個時候呢,就須要你把彈出序列的第一個數從彈入序列的開頭進行比對,若是恰好相等,你就把他彈進去,再彈出來;若是不相等,依舊彈進去,而後再和下一個對比,進行循環。就像上面表格裏的同樣,若是你最後彈出的序列和理想的彈出序列一致,證實他是對應的彈出序列,不然就不是咯。it
using System.Collections.Generic; class Solution { public bool IsPopOrder(int[] pushV, int[] popV) { // write code here //定義一個棧a,定義一個常數i=0 Stack<int> a = new Stack<int>(); int i =0; //循環體操做進棧 for (int j = 0;j<pushV.Length;j++) { a.Push(pushV[j]); //知足i<popV的長度以及第i個出棧數等於頂棧的數執行出棧 while(i<popV.Length && popV[i]==a.Peek()) { a.Pop(); i++; } } //輸出 if(a.Count == 0) { return true; } else { return false; } } }
哇,說實在的,我好討厭這個題目,我感受我思路是對的,用了兩個for循環,可是提示不是全部代碼都會返回value值,哇,搞得我一頭霧水,不過上面的代碼的確蠻容易懂的,邏輯能力仍是次啊!!!!io