剑指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是该压栈 ...
随机推荐
- hdu 3572 Task Schedule(最大流&&建图经典&&dinic)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- javascript 自定义Map
迁移时间:2017年5月25日08:24:19 Author:Marydon 三.自定义Map数据格式 需特别注意的是: js中没有像java中的Map数据格式,js自带的map()方法用于:返回 ...
- SugarCE问题点记录
问:如何获取module参数?如果module参数不存在,如何处理?答:首先检查$_REQUEST['module'],然后再检查$sugar_config['default_module']是否有设 ...
- JavaScript-常用正则函数(适合忘记时看)
test:测试string是否包含有匹配结果,包含返回true,不包含返回false. <script type="text/javascript"> var str ...
- SSH框架:同一个工程之前可以正常运行,现在不能
一个问题是:有一个CRIMS的项目,之前是可以运行成功的.(这个工作空间就只有这一个项目).但是不知道怎么了,现在运行起来就会出现错误. 配置什么的都没有去修改过,(工程坏了??) 不过有一个奇怪的问 ...
- Win7各个版本之间的区别
Windows7包含6个版本,分别为Windows7 Starter(初级版).Windows7 Home Basic(家庭普通版).Windows7 Home Premium(家庭高级版).Wind ...
- 跨浏览器的CORS
function createCORSRequest(method, url){ var xhr = new XMLHttpRequest(); if("withCredentials&qu ...
- javascript常量的定义
例如可以使用 const PI = 3.14159265; 一般不推荐使用 const 关键字,因为它不是 ECMAScript 语法的一部分.当需要常量的时候一般是以命名习惯来约束的,亦即使用大写字 ...
- CSDN开源夏令营 百度数据可视化实践 ECharts(8)
(1)前言 首先谢谢林峰老师,继续接着第七篇提到的内容.CSS布局确实非常累,感觉不好看了就的调整,总的看起来的高大上嘛.好了废话不再多说.今天主要就先解说一个页面的内容,对于CSS布局后面讲会具体的 ...
- server2008服务器IIS7 +PHP5.3出现500错误的排错方法
Windows7 IIS 500 – 内部服务器错误解决方案 1.解决方法:打开IIS,在全局功能视图中找到“错误页”,双击进去后,看最右边的“操作”下的“编辑功能设置…”,将“错误响应”下的“详细错 ...