zoukankan      html  css  js  c++  java
  • 剑指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);
    }
    

       

  • 相关阅读:
    局域网 标准
    协议的构成
    耦合
    theano中tensor的构造方法
    Mac下安装OpenCV3.0和Anaconda和环境变量设置
    【数据源】24万数据集:社会发展类公开数据清单
    Windows Thin PC(7月2日发布)下载+激活+汉化
    CNN笔记
    Python 爬虫的工具列表
    test image
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11938451.html
Copyright © 2011-2022 走看看