棧的壓入 彈出順序

2021-10-03 08:29:50 字數 884 閱讀 7243

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)。

題目中的所有資料都不相同是題眼,根據這個,可以模擬壓棧,然後根據彈出順序,每一次壓入之後,和彈出序列中相比,然後將相等的值彈出,同時移動指向彈出序列的指標,當壓棧序列所有元素都已經遍歷過一遍,如果棧中沒有元素了,返回true,否則返回false。

另一種思路是從彈出序列看,比如按照入棧序列入棧之後彈出的序列是5,4,3,2,1,但是如果現在考察的序列是3,5,4,2,1那麼說明在入棧到3的時候彈出,然後繼續入棧,到5彈出,所以說當後面彈出的值大於當前的值是沒有問題的,但是如果小於這個值,那麼就必須保證這兩個之間所有數全部彈出,比如在4之後彈出的2,4和2之間有個3,彈出之後就可以在4之後彈出2。這種思路需要先將入棧序列做乙個對映,將序列中的數對映到1-n,然後對映相應的彈出序列。

思路一:

class

solution}if

(data.

size()

)return

false

;return

true;}

};

思路二:

class

solution

int last=popv[0]

,tmp,j;

visit[last]=1

;for

(i=1

;i) last=tmp;

}return

true;}

};

棧的壓入 彈出順序 C 版本

題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度...

劍指offer 棧的壓入彈出順序

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...

棧的壓入 彈出序列和棧所有可能的彈出順序

include include include using namespace std bool ispoporder char ppush,char ppop,int nlength void permutation char str,int length if stackdata.top pne...