剑指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-栈的压入弹出序列-栈的主要内容,如果未能解决你的问题,请参考以下文章