题目来自剑指offer系列 九度 1366:http://ac.jobdu.com/problem.php?pid=1367

题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
输入:
每个测试案例包括3行:第一行为1个整数n(1<=n<=100000),表示序列的长度。第二行包含n个整数,表示栈的压入顺序。第三行包含n个整数,表示栈的弹出顺序。

输出:
对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No。
样例输入:
5
1 2 3 4 5
4 5 3 2 1
5
1 2 3 4 5
4 3 5 1 2
样例输出:
Yes
No

看到这个题太熟悉了,数据结构考试中会经常遇到。使用栈模拟一编即可。这里为了效率直接用数组模拟栈了。

//============================================================================
// Name : 栈的序列判断.cpp
// Author : coder
// Version :
// Copyright : www.acmerblog.com
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <stdio.h>
using namespace std;
const int M=100001;
int n,stack[M],arr1[M];
char buf[M*10];
int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);
for(k=0; k<n; k++){
scanf("%d", &tmp);
//如果栈为空,或栈的顶端元素 不等于 要出栈的, 就一直入栈
while( top==0 || tmp != stack[top-1] ){
stack[top++] = arr1[cnt++];
if(cnt>=n) break;
}
top--; //出栈
if(cnt>=n) break;
}
k++;
//所有元素已入栈,则出栈顺序唯一
bool flag = true;
for(; k<n; k++){
scanf("%d", &tmp);
if( tmp != stack[--top]){
flag = false; break;
}
}
gets(buf);//读取剩下多余的
printf("%s\n", flag ? "Yes":"No");
}
return 0;
}
/**************************************************************
Problem: 1366
User: 从此醉
Language: C++
Result: Accepted
Time:140 ms
Memory:3276 kb
****************************************************************/

  123

 fdsfsdf

1

int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

2

 int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

3

int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

12

 int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

13

int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

23

 int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

123]

 int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

-------------------

1

int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

  2

int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

  12

int main() {
while(~scanf("%d", &n)){
int top=0; //栈的顶端位置
int cnt=0; //已入栈的个数
int i, k, tmp;
for(i=0; i<n; i++)
scanf("%d", &arr1[i]);

  

剑指offer(13)-栈的压入、弹出序列 九度1366的更多相关文章

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

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

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

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

  3. 剑指Offer:栈的压入、弹出序列【31】

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

  4. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

  5. 剑指 Offer 31. 栈的压入、弹出序列

    剑指 Offer 31. 栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某 ...

  6. 【剑指Offer】栈的压入、弹出队列 解题报告(Python)

    [剑指Offer]栈的压入.弹出队列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  7. Go语言实现:【剑指offer】栈的压入、弹出序列

    该题目来源于牛客网<剑指offer>专题. 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5 ...

  8. 剑指Offer 21. 栈的压入、弹出序列 (栈)

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

  9. 剑指OFFER之栈的压入、弹出序列(九度OJ1366)

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

随机推荐

  1. 算法笔记_060:蓝桥杯练习 出现次数最多的整数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统 ...

  2. Python/MOOC /翻Wall和互联网编程的那些事

    Python MOOC 翻Wall和互联网编程的那些事 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途. 2)若本文档内有侵权文字或图片等内容,请联系 ...

  3. 把IIS日志导入到数据库

    1.建表 CREATE TABLE [dbo].[inetlog0828]( [date] [date] NULL, ) NULL, ) NULL, ) NULL, ) NULL, ) NULL, [ ...

  4. 用rz,sz命令在windows和linux之间传输文件(转)

    转自http://www.linuxmine.com/178.html有很多人没有听说过ZModem协议,更不知道有rz/sz这样方便的工具: 下面一段是从SecureCRT的帮助中copy的: ZM ...

  5. 浏览器 UserAgent

    IE Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET C ...

  6. 点滴积累【JS】---JS小功能(offsetLeft实现图片滚动效果)

    效果: 代码: <head runat="server"> <title></title> <style type="text/ ...

  7. 何为优秀的机器学习特征 zz

    提供好的特征是机器学习任务中最重要的工作,那么何为优秀的机器学习特征?以及如何高效地组合这些特征? 以二分类问题为例,好的特征具有很好的区分性.例如学习任务是区分两种不同类型的狗:灰猎犬(Greyho ...

  8. atitit.javascript js 上传文件的本地预览

    atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL  1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...

  9. C#.NET中使用BackgroundWorker在模态对话框中显示进度条

    这里是一个示例,其中展示了如何使用Backgroundworker对象在模态对话框中显示后台操作的实时进度条. 首先是主窗体代码: using System; using System.Collect ...

  10. MVC & Entity Framework(2)- controller、Models单独DLL

    继上一篇MVC & Entity Framework(1)- 开发环境之后,已经很久没更新了.接下来记录一下怎么把MVC中的controller单独拆为一个类库,然后在web项目中引用.另外, ...