題目描述
輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否可能為該棧的彈出順序。
假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個(gè)序列的長度是相等的)
思路
按棧的壓入順序進(jìn)行入棧,每入棧一次都要與出棧順序的棧頂元素進(jìn)行比較,如果與出棧元素不相等則繼續(xù)入棧,直到與棧頂元素比較后相等,則出棧棧頂元素,同時(shí)出棧順序移到下一位單元
如果遍歷完出棧順序的每個(gè)單元后棧為空,則壓入與彈出順序一一對(duì)應(yīng) 否則不對(duì)應(yīng)。
推薦閱讀:iOS開發(fā)——BAT面試題合集(持續(xù)更新中)
作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流群:638302184,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長!
源代碼
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int pushSize = pushV.size();
int popSize = popV.size();
int flag = 0;
if (pushSize != popSize || pushSize == 0 || popSize == 0) {
return false;
}
int start = 0;
int end = popSize - 1;
stack <int> assistStack;
stack <int> stack;
for (int i = 0; i < popSize; i++) {
stack.push(pushV[i]);
while (!stack.empty() && popV[start] == stack.top()) {
stack.pop();
start++;
}
}
return stack.empty();
}
};
作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流裙:638302184,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長!