入栈序列和出栈序列

时间限制(普通/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. swoole是如何实现任务定时自动化调度的?

    https://www.muzilong.cn/article/117 开发环境 环境:lnmp下进行试验. 框架:laravel5 问题描述 这几天做银行对帐接口时,踩了一个坑,具体需求大致描述一下 ...

  2. gnome-tweak-tool设置gnome参数, 修改CENTOS7桌面图标大小

    GNOME Tweak Tool 是 GNOME 3 的优化配置工具,为我们带来 GNOME Shell 扩展安装功能,方便Linux用户对 Gnome Shell 进行一些调整. 主要功能有:安装, ...

  3. VS2010-MFC(对话框:为控件添加消息处理函数)

    转自:http://www.jizhuomi.com/software/156.html MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理.比如我们点击 ...

  4. Docker系列(十五):Openshift 简介

    1.简单了解openshift相关组件 1.openshift是基于容器技术构建的一个云平台 2.kubernetes是容器编排组件 3.docker是容器引擎驱动组件 4.openshift在Pas ...

  5. Python学习day08-python进阶(2)-内置方法

    Python学习day08-python进阶(2)-内置方法 列表数据类型内置方法 作用 描述多个值,比如爱好 定义方法       xxxxxxxxxx 2         1 hobby_list ...

  6. <每日一题>题目25:快速排序

    ''' 快速排序:分而治之,一分为二进行排序 ''' import cProfile import random def quick_sort(nums): if len(nums) <= 1: ...

  7. 机器学习中常用的距离及其python实现

    1 概述 两个向量之间的距离(此时向量作为n维坐标系中的点)计算,在数学上称为向量的距离(Distance),也称为样本之间的相似性度量(Similarity Measurement).它反映为某类事 ...

  8. Leetcode961. N-Repeated Element in Size 2N Array重复N次的元素

    在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次. 返回重复了 N 次的那个元素. 示例 1: 输入:[1,2,3,3] 输出:3 示例 2: 输入:[2,1,2, ...

  9. c语言一个例子对比php学习随记

    今天开始学写一些简单的C例子,发现很多和PHP不一样的地方,做个笔记. #include <stdio.h> int main(void) { int a,b; printf(" ...

  10. VS未能加载文件或程序集“xxx.dll” 设置Build Events

    完整错误信息:"System.IO.FileNotFoundException"类型的未经处理的异常在 未知模块 中发生 未能加载文件或程序集"Ctp.Core.dll& ...