Problem Description:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

Input:

输入一个T,表示理面输入T组数据。每组数据第一行为一个数n,接下来有两行n个数字,第一行代表数字进栈的序列,第二行代表数字出栈的序列。(所有数字不大于50)

Output:

判断出栈序列能不能由进栈序列产生,如果能输出YES,否则输出NO。

Sample Input:

2
5
1 2 3 4 5
4 5 3 2 1
5
1 2 3 4 5
4 3 5 1 2

Sample Output:

YES
NO
解题思路:借用一个额外的辅助栈
举个栗子:
①入栈Push序列:1,2,3,4,5
②出栈Pop序列:4,5,3,2,1
遍历压栈顺序,先将第一个放入辅助栈中,这里是1,然后判断辅助栈的栈顶元素是不是出栈Pop顺序的第一个元素,这里是4,很显然1≠4,所以我们继续将元素压入辅助栈中,直到相等后辅助栈就开始出栈,出栈一个(栈顶元素)元素,则将出栈Pop顺序向后移动一位,直到不相等,这样一直循环,直到压栈顺序遍历完成,如果这时辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。
简单模拟一下过程:首先1入辅助栈,此时栈顶1≠4,继续入栈2,此时栈顶2≠4,继续入栈3,此时栈顶3≠4,继续入栈4,此时栈顶4==4,出栈4,弹出序列的位置向后移一位,此时为5,辅助栈里面是1,2,3,此时栈顶3≠5,继续入栈5,此时栈顶5==5,出栈5,弹出序列向后一位,此时为3,辅助栈里面是1,2,3….依次执行,最后判断辅助栈为空,若不为空说明弹出序列不是该栈的弹出顺序。
AC代码:
 #include <iostream>
#include <vector>
using namespace std;
bool IsPopOrder(vector<int> Push, vector<int> Pop) {
if(Push.size()==)return false;
vector<int> vec;//辅助容器
for(size_t i=,j=;i<Push.size();++i){
vec.push_back(Push[i]);
while(j<Pop.size()&&Pop[j]==vec.back()){vec.pop_back();j++;}
}
return vec.empty();//如果最后vec容器中元素个数为0,说明出栈序列满足条件,返回true
}
int main(){
vector<int> pushlist;
vector<int> poplist;
int t,n,x;
cin>>t;
while(t--){
pushlist.clear();//清空
poplist.clear();
cin>>n;
for(int i=;i<=n;++i){cin>>x;pushlist.push_back(x);}
for(int i=;i<=n;++i){cin>>x;poplist.push_back(x);}
if(IsPopOrder(pushlist, poplist))cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
}
 

ACM_栈的压入、弹出序列的更多相关文章

  1. 【剑指offer】栈的压入弹出序列,C++实现(举例)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...

  2. 剑指offer - 栈的压入弹出序列 - JavaScript

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...

  3. 剑指offer-面试题22.栈的压入,弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...

  4. 剑指Offer20 栈的压入弹出序列是否正确

    /************************************************************************* > File Name: 20_IsPopO ...

  5. 剑指offer-栈的压入弹出序列21

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

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

    #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #i ...

  7. 剑指offer 栈的压入弹出 顺序

    判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍 ...

  8. redis list 查询、下标查询、删除、裁剪、压入弹出、队列实现

    查询  lrange list 0 1 // 注意0和1之间是空格:这个命令和pop命令不一样,不会删除里面的值lrange list 0 -1 // 所有的 下标查询 lpush person zs ...

  9. 剑指Offer(二十一):栈的压入、弹出序列

    剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

随机推荐

  1. 利用stylist插件,简单两步屏蔽新浪微博上的广告

    以前新浪微博只是在侧栏有几块小小的广告,还算可以接受,想着忍忍就算了,可最近真是越来越不厚道了,自从和淘宝合作之后,侧栏就开始有一大块广告根据你在淘宝的搜索记录推荐商品,更可恶的是信息流里的祛痘微博现 ...

  2. * format-- set command window output display format

    the displayed number may not match the input number due to display format default: 4 decimal syntax: ...

  3. BZOJ 2274 [Usaco2011 Feb]Generic Cow Protests

    [题解] 很容易可以写出朴素DP方程f[i]=sigma f[j] (sum[i]>=sum[j],1<=j<=i).  于是我们用权值树状数组优化即可. #include<c ...

  4. java 8新特性 匿名内部类的使用

    package com.atguigu.java8; import java.util.ArrayList; import java.util.Arrays; import java.util.Com ...

  5. EasyUI Datagrid的简单使用

    此前同样写过EasyUI Datagrid的demo,好记性不如烂笔头,何况记性也不是那么好,赶紧记录一下.照搬上一篇EasyUI Tree的格式. 实现效果:获取数据库表的数据,在EasyUI Da ...

  6. Git--删除远程仓库文件但不删除本地仓库资源

    我们在使用idea开发的过程中经常会出现新建项目的时候直接把xxx.iml文件也添加到了git trace 当然这并不会出现什么问题,问题是当我们把xxx.iml文件push到我们github上之后, ...

  7. 布局(codevs 1242)

    题目描述 Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们 ...

  8. 【故障处理】初始化数据时报600错误kcbz_check_objd_typ_3

    http://blog.itpub.net/519536/viewspace-661905/

  9. 淘宝手机rem的如何使用

    1.主要介绍几个移动端常用的单位rem.vw.vh,配合传统的px.百分比.<viewport>标签,兼容适配移动端的各种分辨率的手机端. rm : 这个单位是以父元素为标准来进行计算 , ...

  10. Jupyter Notebook: 解决build docker-stacks时conda太慢的问题

    当想使用docker安装Jupyter Notebook时,有一个很好的项目是docker-stacks(https://github.com/jupyter/docker-stacks/tree/m ...