剑指offer(13)-栈的压入、弹出序列 九度1366
题目来自剑指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的更多相关文章
- 【剑指offer】栈的压入弹出序列,C++实现(举例)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...
- 剑指offer-面试题31-栈的压入弹出序列-栈
#include<iostream> #include<string.h> #include<algorithm> #include<cmath> #i ...
- 剑指Offer:栈的压入、弹出序列【31】
剑指Offer:栈的压入.弹出序列[31] 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈 ...
- 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题
剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...
- 剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某 ...
- 【剑指Offer】栈的压入、弹出队列 解题报告(Python)
[剑指Offer]栈的压入.弹出队列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- Go语言实现:【剑指offer】栈的压入、弹出序列
该题目来源于牛客网<剑指offer>专题. 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5 ...
- 剑指Offer 21. 栈的压入、弹出序列 (栈)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 剑指OFFER之栈的压入、弹出序列(九度OJ1366)
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
随机推荐
- GUID转换成16位字符串或19位唯一字符串
整理几个经常使用GUID转换成16位字符串或19位唯一字符串方法: /// <summary> /// 依据GUID获取16位的唯一字符串 /// Author : 付义方 /// < ...
- 类非静态成员的函数指针 的使用 Function pointer of a non-static member function of a class
you can get the pointer of the method, but it has to be called with an object typedef void (T::*Meth ...
- swift2.0中文版教程
有些同学问我要swift的中文版教程,为了节省大家的找资料的时间,我就把我网上下载的PDF放到这里共享好了. 点击链接或者右击选择下载文件进行下载:swift2.0中文版教程 在此也感谢翻译者们的贡献 ...
- android Volley 上传文件上传图片
Volley不解释了吧, android 官方的一个网络请求库. 源码的地址在: git@github.com:com314159/VolleyMultiPartRequest.git 上面的是ssh ...
- jQuery国际化插件 jQuery.i18n.properties 【轻量级】
jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化. 国际化英文单词为:Internationalization,又称i18n,“i”为单词的第 ...
- python oop面向对象笔记
#coding:utf-8 class Person(object): def __init__(self,name,wage): self.name = name self.wage = wage ...
- Atitit.md5 实现原理
Atitit.md5 实现原理 1. 算法流程图2 2. MD5算法过程:2 2.1. 3. 处理分组数据3 3. MD5加密字符串实例5 4. Md5的历史7 4.1.1. MD27 4.1.2. ...
- atitit.it企业管理 项目管理 中的 授权机制 的来源 君权神授 的一定合理性
atitit.it企业管理 项目管理 中的 授权机制 的来源 君权神授 的一定合理性 1. 授权(权利来源)的5种模式 1 2. 企业的组织机构与管理运作来源于国家的管理...而国家的管理又来源于宗教 ...
- Catalog的种类
框架中的Catalog 在MEF框架中,包含了4种Catalog,所有的Catalog的是从System.ComponentModel.Composition.Primitives名称空间下的Comp ...
- 斑马Zebra ZPLII指令集中文说明解释
我们最常用的斑马(Zebra)条码打印机,应用ZPLII命令来控制打印,说明书中有每条指令的详细说明及相关示例,下面是各指令的中文释义: ^A 对Zebra内置点阵字体缩放 ^A(可缩放/点阵字体 ...