1. 程式人生 > >[劍指offer] 棧的壓入、彈出序列

[劍指offer] 棧的壓入、彈出序列

pub lock 之前 pre div ret order 判斷 第一個

題目描述

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


既然是判斷是否是棧的彈出順序,就用一個棧,不斷的按序將第一個序列中的元素壓入棧中,

在壓之前與當前最靠前的未比較的第二個序列的元素比較,相等的話認為是壓入後又彈出棧,

最後第一個序列全部壓完後判斷是否能按第二個序列的剩下的數的順序全部壓出。

class Solution {
public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int i = 0, j = 0; stack<int> tmp; for (; i < pushV.size(); i++) { if (pushV[i] == popV[j]) j++; else tmp.push(pushV[i]); } for (; j < popV.size(); j++) {
if (tmp.top() == popV[j]) tmp.pop(); else break; } return tmp.size() == 0; } };

[劍指offer] 棧的壓入、彈出序列