剑指offer-面试题31-栈的压入弹出序列-栈

Posted buaazhhx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-面试题31-栈的压入弹出序列-栈相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stdio.h>
/*
题目:
	输入两个整数序列,第一个序列1表示栈的压入顺序,第二个序列2表示栈的弹出顺序。
	判断第一个栈是否可以以第二个序列的方式弹出。
*/
/*
思路:
	设置一个辅助栈,遍历序列2。
	若遍历到的序列2的元素与栈顶元素相同,则弹出栈,遍历下一个元素;
	若遍历到的序列2的元素与栈顶元素不同或栈为空,则将序列1压入栈,直到相同,或序列1被全部压入栈。
*/
#include<vector>
#include<stack>

using namespace std;


bool IsPopOrder(vector<int> pushV,vector<int> popV) {
   int popVSize = popV.size();
   int pushVSize = pushV.size();

   if(popVSize != pushVSize) return false;

   stack<int> myStack;
   int pushVIndex = 0;
   for(int popVIndex = 0; popVIndex < popVSize; popVIndex++){
        if(!myStack.empty() && myStack.top() == popV[popVIndex]){
            myStack.pop();
        }else{
            while(pushVIndex < pushVSize && pushV[pushVIndex] != popV[popVIndex]){
                myStack.push(pushV[pushVIndex]);
                pushVIndex++;
            }
            if(pushV[pushVIndex] != popV[popVIndex]){
                return false;
            }else{
                pushVIndex++;
            }
        }
   }
   return true;
}

int main(){
   vector<int> pushV = {1,2,3,4,5};
   vector<int> popV = {4,3,5,1,2};
   cout<<IsPopOrder(pushV,popV);
}

   

以上是关于剑指offer-面试题31-栈的压入弹出序列-栈的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer:面试题22栈的压入弹出序列

[剑指offer]面试题22:栈的压入弹出序列

剑指Offer对答如流系列 - 栈的压入弹出序列

剑指Offer:栈的压入弹出序列31

剑指offer--31栈的压入弹出序列

剑指offer--31栈的压入弹出序列