輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
分析:我的思想是不借助輔助棧的,彈出序列的第乙個元素,在壓入序列中找到這個元素的位置n,那麼壓入棧中的前n個元素,在彈出序列裡應該是倒序排列的,就這乙個基本思想。如果第乙個滿足,那麼就在彈出序列和壓入序列中同時刪掉這個元素,重複這個步驟直到序列為空,如果都滿足,就是相應的彈出序列,否則就不是。
還有一種輔助棧的思想,這種思路是真的簡單,**幾行就寫完了,自嘆不如。宣告乙個棧,然後比較壓入序列和彈出序列的第乙個元素,不相同就把壓入序列的第乙個元素壓棧,然後比較壓入序列的第二個元素與彈出序列的第乙個元素,如果相同就兩個序列都彈出,繼續比較。程式執行結束,也就是比較到序列的末尾,如果輔助棧為空,就是相應的彈出序列,否則就不是。
不借助輔助棧的**:
class solution
if(i==pushv)
return false;
pushc.clear();
pushc.insert(pushc.begin(), pushv.begin(), pos);
pushv.erase(pos);
popv.erase(popv.begin());
if (!hasorder(pushc, popv))
return false;}}
bool hasorder(vectorpushc, vectorpopc)
}return false;}};
借助輔助棧的思想:
class solution
}
return
stack.empty();
}
};
棧的壓入彈出序列
題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。解答 可以用乙個輔助的棧來儲存入...
棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,判斷兩個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1 2 3 4 5是某棧的壓棧序列,序列4 5 3 2 1是該壓棧序列對應的乙個彈出序列,但4 3 5 1 2就不可能是該壓棧序列的彈出序列。bool ispoporder cons...
棧的壓入彈出序列
1.問題描述 輸入兩個整數序列,第乙個序列表示棧的壓入序列,請判斷第二個序列是否為該棧的彈出序列。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但 4,3,5,1,2,就不可能是該壓棧序列的彈出序列。來自 劍指offer...