剑指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是该压栈 ...
随机推荐
- 滚动锁定 scroll lock 键有什么用?
滚动锁定 scroll lock 键有什么用? 中文名称:滚动锁定键 按下此键后在Excel等按上.下键滚动时,会锁定光标而滚动页面:如果放开此键,则按上.下键时会滚动光标而不滚动页面. ...
- 【Python】学习笔记十:字典
字典是Python中唯一的映射类型(哈希表) 字典的对象时可变的,但字典的键值必须是用不可变对象,并且一个字典中可以使用不同类型的键值 1.定义字典 dict={key1:value1,key2:va ...
- (转)职责链设计模式(Chain of Responsibility)
Chain of Responsibility定义Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境(转)
前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常 ...
- jquery删除一个元素,但保留里面的元素
删除元素/内容 如需删除元素和内容,一般可使用以下两个 jQuery 方法: remove() - 删除被选元素(及其子元素) empty() - 从被选元素中删除子元素 但是如果我想删除这个元素,但 ...
- LinkedList的一种错误使用方法
近期在做图像处理的时候.发现某一段代码很的慢.慢得让人无法接受.基本的代码是顺序訪问一个LinkedList的元素,效果是随着index的变大,速度越来越慢,list的元素个数在百万以上.找到原因,分 ...
- C语言之文件操作08——总结
C程序的文件操作共涵盖7个例题,包括格式打印,文件读取,条件查找,矩阵的文件操作,数据格式输入及调用计算等内容. 文件操作使得程序有更强的拓展性,使其能够单独保存数据.这为程序的调试和优化打下了坚实的 ...
- Python 实现字符串转换成列表 实现str转换list
其中Python strip() 方法用于移除字符串头尾指定的字符 split()就是将一个字符串分裂成多个字符串组成的列表 >>> image ='1.jsp,2.jsp,3.js ...
- import { Subject } from 'rxjs/Subject';
shared-service.ts import { Observable } from 'rxjs/Observable'; import { Injectable } from '@angular ...
- [Yii Framework] Share the session with memcache in Yii
When developing distributed applications with Yii, naturally, we will face that we have to share the ...