題目:輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應(yīng)的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為惠州等服務(wù)建站,惠州等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為惠州企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
分析:以壓入1,2,3,4,5,彈出4,5,3,2,1為例,首先壓入與彈出序列用vector執(zhí)行,接受需要stack(先進(jìn)后出),每壓入一個元素都需要與與彈出序列判等,如果相等直接pop(),否則繼續(xù)壓入,而判等條件s.top() == popV[j],判等次數(shù)需要一個循環(huán)while,退出條件就是壓入的所有元素都彈出了,即s.empty(),最后return s.empty();如果為空,即彈出序列正確,不為空,則彈出序列錯誤
#include
using namespace std;
#include
#include
class Solution {
public:
bool IsPopOrder(vector pushV, vector popV) {
stack s;
int j = 0;
for (int i = 0; i pushV(a, a + 5);
int b[] = { 4, 5, 3, 2, 1 };
vector popV(b, b + 5);*/
//直接用vector容器
vector v1{ 1, 2, 3, 4, 5 };
vector v2{4,5,3,2,1};
Solution S;
if (S.IsPopOrder(v1, v2))
cout << "True" << endl;
else
cout << "Flase" << endl;
cout << "Hello world!" << endl;
return 0;
}