栈和排序(贪心+思维)
链接:https://ac.nowcoder.com/acm/problem/14893
来源:牛客网
题目描述
给你一个1->n的排列和一个栈,入栈顺序给定
你要在不打乱入栈顺序的情况下,对数组进行从大到小排序
当无法完全排序时,请输出字典序最大的出栈序列
输入描述:
第一行一个数n
第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格
输出描述:
输出一行n个数表示答案,用空格隔开,结尾无空格
示例1
输入
复制
5
2 1 5 3 4
输出
复制
5 4 3 1 2
说明
2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈
思路:对于数a[i],如果说它等于[i,n]之间的最大值,那么它就可以优先输出。如果说不等于的话,就说明[i,n]之间有比a[i]大的数字,那么就将a[i]保留下来。假如a[i]符合第一种情况,而保留的那个数组中第一个数x,大于a[i+1]的话,说明[i+1,n]没有比x大的了,这个时候要先输出x。
代码如下(用stack应该更好一些,这个题目我用的vector):
#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e6+100;
vector<int> p1,p2,p3;
int a[maxx];
int n;int main()
{scanf("%d",&n);int x;p1.push_back(0);for(int i=1;i<=n;i++) {scanf("%d",&x);p1.push_back(x);}a[n+1]=0;for(int i=n;i>=1;i--) a[i]=max(a[i+1],p1[i]);p3.push_back(0);for(int i=1;i<=n;i++){if(a[i]!=p1[i]) p2.push_back(p1[i]);else{p3.push_back(p1[i]);if(i+1<=n){while(p2.size()&&p2.back()>a[i+1]) p3.push_back(p2.back()),p2.pop_back();}}}while(p2.size()) p3.push_back(p2.back()),p2.pop_back();for(int i=1;i<=n;i++) cout<<p3[i]<<" ";return 0;
}
努力加油a啊,(o)/~
栈和排序(贪心+思维)相关推荐
- 牛客练习赛10 B栈和排序【思维】
题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列 输入描述: 第一行一个数n 第二行n个 ...
- 贪心/思维题 UVA 11292 The Dragon of Loowater
题目传送门 1 /* 2 题意:n个头,m个士兵,问能否砍掉n个头 3 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 4 */ 5 #include <cstdio> 6 #i ...
- 左神算法:用一个栈实现另一个栈的排序(Java版)
本题源自左神<程序员面试代码指南>"用一个栈实现另一个栈的排序"题目. 题目 在一个栈中元素的类型为整型,现在想将该栈从栈顶到栈底按从大到小的顺序排序,只许申请一个栈, ...
- 栈和队列之用一个栈实现另一个栈的排序
用一个栈实现另一个栈的排序 题目: 一个栈元素的类型为整数,现在要想将该栈从顶到底按从大到小的顺序排列,只允许申请一个栈,除此之外, 可以申请一个变量,可以申请额外的变量,但是不能申请额外的数据结构, ...
- 牛客题霸 [栈和排序] C++题解/答案
牛客题霸 [栈和排序] C++题解/答案 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序 ...
- 1450F The Struggling Contestant(贪心+思维)
1450F The Struggling Contestant(贪心+思维) Codeforces Global Round 12 F. The Struggling Contestant 题面:Th ...
- cf:B. Patchouli‘s Magical Talisman【数学贪心思维 + 奇偶分析】
分析 给出一堆数 可以通过相加或除2让它们全部变成奇数 如果全奇数返回0 由于奇数 + 偶数 = 奇数 所以只要有一个奇数就能把偶数和它相加不停的变成奇数 所以只要存在奇数,就可以返回偶数的个数 否则 ...
- 【左程云Java算法】Chapter1-5:用一个栈实现另一个栈的排序
[左程云Java算法]Chapter1-5:用一个栈实现另一个栈的排序 [题目] 用一个栈实现另一个栈的排序 [要求] 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个 ...
- NC14893 栈和排序
题目: NC14893 栈和排序 ,哈哈,我们今天来看一道比较简单的数据结构题嘛,这是选自牛客上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目 ...
最新文章
- python读取txt文件-python txt文件的写入和读取
- WordPress获取页面文章内容的代码
- mongodb实现对某列求和SUM
- oracle 数据库运行模式
- 设计模式:观察者模式(Observer)
- scikit-learn工具包使用建议(转)
- @Pointcut的用法
- Unity的Animator中Transition有延迟的问题
- 移动互联消亡者及原因分析
- QT最常用的字符串操作
- Jsoup进阶之获取指定数据
- linux下 mysql 学习(一)
- OpenLayers自定义投影,转换OpenLayers中加载的OSM的默认投影坐标
- docker 中 NGINX+PHP+MYSQL+REDIS+Elasticsearch 环境搭建 (windows系统)
- 计算机网络:令牌环网IEEE 802.5
- 【软件测试】使用C++ Test 进行静态测试
- 如何用 Excel 制作二维码
- matlab的数字图像处理,基于MATLAB的数字图像处理分析及应用.pdf
- python小课风变编程_风变编程Python小课最近很火,大家学完感受如何?
- 大连理工计算机博士,【看完窒息】大连理工大学博士遗书
热门文章
- TreeView,TreeNode,TreeNodeCollection 的使用
- 保留3位 python_Python基础(六)
- php 七牛云fetch,七牛云调用类
- mysql dump hbase_mysqldump导出全数据库
- c语言memcopy_C语言中memcpy 函数的用法详解
- Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总
- RGB(FFFFFF)转255:255:255
- pythonurllib标准_Python标准库学习笔记 urllib模块
- java 工厂模式 计算器_java设计模式之简单工厂模式
- oauth password模式_SpringBoot OAuth2.0 认证授权(密码模式)