入栈序列和出栈序列

时间限制(普通/Java):1000MS/3000MS         运行内存限制:65536KByte

总提交:293          测试通过:68

比赛描述

给出入栈序列{A},保证{A}各个元素值各不相等,输出字典序最大的出栈序列.

如入栈序列{A} = 1, 2, 9, 4, 6, 5

则字典序最大的出栈序列为9, 6, 5, 4, 2, 1

输入

第一行一个整数n (1 <= n <= 100).

接下来是入栈序列{A}, n个正整数ai(0 < ai < 1000),且i != j则ai != aj.

输出

一行,字典序最大的出栈序列.   每个数字以空格分开。

样例输入



2 1 9 4 6 5

样例输出

9 6 5 4 1 2

提示

null

题目来源

NUPT

题目思路:

此题可转化为:使用一个队列(或栈,为了便于区分该数字序列与空栈,我们采用队列的叙述方式进行叙述)来表示初始数字序列,通过一个空栈辅助,输出最大字典序。

保证字典序最大,必须保证第一个数字为整个数列中最大的数字。

从该数字分开,前一段入栈,后一段留在数字序列中。

用栈顶元素 与  数字序列中数字最大值比较,若数字序列中值大,则不断从序列中出队数字压入栈中,后将该最大值输出;反之,则弹出栈顶元素。

如果采用扫描的方法找数字序列中的最大值,复杂度将为O(n^2)。

我们可以采用以下方法进行处理(最终算法):

1、初始化:

f[i]表示数字序列中第i个数往后所有数中最大的数。将数字序从后往前遍历,初始化f[i],f[1]即为最大值。

从该最大值分开,前一段入栈,后一段保留在数字序列中。

2、循环处理,直至全部输出:

1、边界:若栈空,则从数字序列中出队元素压入栈

2、边界:若数字序列空,弹出栈中所有元素

3、若栈顶元素大于等于f[head]:弹出栈顶

若栈顶元素小于f[head]:出队数字序列中的一个元素压入栈。

注意:NOJ不过滤多余的空格和换行符

代码如下:(代码凌乱,仅供参考)

#include<iostream>
#include<cstdio> int f[200];
int n; int num[200];
int head; int stack[200];
int top;
int size; int k,cnt; int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&num[i]);
} f[n]=num[n];
num[0]=-9999999;
for(int i=n-1;i>=0;i--)
{
if(f[i+1]<num[i])
{
f[i]=num[i];
k=i;
}
else
{
f[i]=f[i+1];
}
} for(int i=1;i<=k-1;i++)
{
stack[++top]=num[i];
size++;
}
printf("%d ",num[k]);
cnt++;
head=k+1;
while(cnt!=n)
{
if(size==0)
{
size++;
stack[++top]=num[head++];
}
else if(head==n+1)
{
while(size!=0)
{
if(cnt==n-1)printf("%d",stack[top]);
else printf("%d ",stack[top]);
top--;
size--;
cnt++;
}
}
else
{
if(stack[top]>=f[head])
{
if(cnt==n-1)printf("%d",stack[top]);
else printf("%d ",stack[top]);
top--;
size--;
cnt++;
}
else
{
stack[++top]=num[head++];
size++;
}
}
}
return 0;
}

【NOJ2024】入栈序列和出栈序列的更多相关文章

  1. 写一个栈,实现出栈、入栈、求最小值,时间复杂度为O(1)

    #-*-coding:utf-8-*- ''' 需求:写一个栈,实现出栈.入栈.求最小值,时间复杂度为O(1) 思路:通过两个栈实现,一个栈stack,一个辅助栈min_stack,记录stack中的 ...

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

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

  3. Python 根据入栈顺利判定出栈顺序

    1.读取入栈,出栈数据: 2.把数据分别转化成整数列表: 3.新建栈列表,用入栈数据进行压栈:如果栈列表不为空,并且栈顶层数据为出栈的元素:删除栈列表的顶层数据: 4.如果栈列表不为空,说明栈列表里面 ...

  4. 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是

    技术之瞳 阿里巴巴技术笔试心得习题2.65:  一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D)  A.DEFCBA B.DCEFBA C.FEDCBA  D.FECDBA E.ABCDEF ...

  5. 牛客网剑指offer第21题——判断出栈序列是否是入栈序列

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

  6. SDUT-3334_数据结构实验之栈与队列七:出栈序列判定

    数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...

  7. 基于visual Studio2013解决面试题之0409判断一个栈是否另外一个栈的弹出序列

     题目

  8. C++中栈的出栈,入栈规则:A,B,C,D,E

    考题: 栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前  栈中元素可以出栈,则出栈序列可能是_____a d___________. a.  ABCED b.  DBCEA   c.  CD ...

  9. n个元素的入栈顺序有多少种出栈顺序?

    问题:w1.w2.w3.w4.w5,5个元素将会按顺序入栈,求出栈顺序有多少种情况. 先写一下结论方便记忆: 1个元素:1种 2个元素:2种 3个元素:5种 4个元素:14种 5个元素:42种 简单的 ...

随机推荐

  1. 条件渲染v-if

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  2. 《DSP using MATLAB》Problem 8.2

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  3. freemarker 嵌套循环 (导出word时,修改ftl模板)

    1.循环 (循环输出reportList列表的每行的姓名) <#list reportList as report> ${report.name} </$list> 2.嵌套循 ...

  4. Python爬取b站任意up主所有视频弹幕

    爬取b站弹幕并不困难.要得到up主所有视频弹幕,我们首先进入up主视频页面,即https://space.bilibili.com/id号/video这个页面.按F12打开开发者菜单,刷新一下,在ne ...

  5. 从0开始学习ssh之basedao

    用于所有dao里边会有许多相同的方法,例如save,update等等.应此设计一个basedao,所有dao都继承它.这样可以省去许多工作量. basedao如下 package cn.itcast. ...

  6. conan本地安装包

    在远程有的情况下,本地没有的情况下,执行命令 conan install package/版本号@usr/stable ,比如conan install opencv/3.4.3@seal/stabl ...

  7. 1008-Redo

    关于flag,都立下了 T1 考试的时候就觉得是贪心,但是不会反悔emm…… 于是正解就是一个堆优化可反悔的贪心=.= 每次找前面最小的,于是是小根堆. 我们在交易的时候发现后面的一个可以更优. 于是 ...

  8. 深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]

    在这个小结里面重点讨论原子操作的原理和设计思想. 由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念. 在Java Concurrency in Practice中是这样定义线程安全的: ...

  9. jeecms v9.3 has a stroed xss vulnerability

    转载:https://blog.csdn.net/libieme/article/details/83588929 jeecms v9.3 has a stroed xss vulnerability ...

  10. 解决 Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'

    If you are looking for the solution in Android Studio : Right click on your app Open Module Settings ...