1. 程式人生 > >劍指Offer-棧的壓入、彈出序列

劍指Offer-棧的壓入、彈出序列

span tac 比較 最終 urn color public turn i++

題目:

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

思路:

  將pushV中的元素依次壓入棧中,並從頭比較popV中的元素。若元素相同,則從棧中彈出該元素並向後移動popV,直到pushV中所有的元素都被壓入棧中。若最終棧中元素為空,證明彈出順序為true,否則為false。

代碼:

 1 class Solution {
 2 public
: 3 bool IsPopOrder(vector<int> pushV, vector<int> popV) { 4 stack<int> s; 5 int j = 0; 6 for(int i = 0;i < pushV.size();i++){ 7 s.push(pushV[i]); 8 while(j <= popV.size() && s.top() == popV[j]){ 9 j++;
10 s.pop(); 11 } 12 } 13 return s.empty(); 14 } 15 };

劍指Offer-棧的壓入、彈出序列