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. jmeter录制火狐浏览器

    昨天看youtube,居然发现有这功能,啊哈哈 听不懂英语 也能有收获. 一.Jmeter 文件中选择Templates->Recording 二.创建之后,自动出现一个模板: 1. Threa ...

  2. 超星toPDF

    * ssReader to pdf   Note: editor: Emacs-org   1. download and open the book with sspreader 2. click ...

  3. array copy rotate in Pointwise

    goal: # # Copyright 2010 (c) Pointwise, Inc. # All rights reserved. # # This sample Pointwise script ...

  4. 【Codeforces 924C】Riverside Curio

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 设第i天总共的线数为t[i] 水平线上线数为m[i]是固定的 水平线下的线数设为d[i] 则d[i]+m[i]+1=t[i] 也就是说问题可以 ...

  5. noip模拟赛 三角形

    [问题描述] 平面上有N条直线,用方程Aix + Biy +Ci =0表示.这些直线没有三线共点的.现在要你计算出用这些直线可以构造出多少三角形? 输入: 第1行:一个整数N(1 ≤ N≤ 30000 ...

  6. codeforces gym 100357 I (费用流)

    题目大意 给出一个或与表达式,每个正变量和反变量最多出现一次,询问是否存在一种方案使得每个或式中有且仅有一个变量的值为1. 解题分析 将每个变量拆成三个点x,y,z. y表示对应的正变量,z表示对应的 ...

  7. Win32编程API 基础篇 -- 4.消息循环

    消息循环 理解消息循环 为了编写任何即使是最简单的程序,了解windows程序的消息循环和整个消息发送结构是非常有必要的.既然我们已经尝试了一点消息处理的东西,我们应该对整个程序有更深入的理解,如果你 ...

  8. 最小生成树 D - Constructing Roads

    There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...

  9. Android首次启动时间长优化之预编译提取Odex

        提示!应用程序的安装有两种情况,第一:首次启动系统时安装.第二:系统启动完毕后安装. 本篇博文基于第一种安装场景.在系统首次启动的场景中,系统会对/system/app./system/pri ...

  10. LeetCode OJ 322. Coin Change DP求解

    题目链接:https://leetcode.com/problems/coin-change/ 322. Coin Change My Submissions Question Total Accep ...