劍指Offer-棧的壓入、彈出序列
阿新 • • 發佈:2017-08-18
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-棧的壓入、彈出序列