栈和排序(贪心+思维)
链接: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 栈和排序 ,哈哈,我们今天来看一道比较简单的数据结构题嘛,这是选自牛客上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目 ...
最新文章
- 等同于JavaScript isset()
- 8.2-3 partprobe、tune2fs
- linux 系统 权限
- android.os.NetworkOnMainThreadException问题
- 好程序员web前端教程:字符串
- imu传感器工作原理_各种传感器工作原理汇总
- html5输入框点击后消除高光,请问(VR渲染)光域网的灯光怎么把“高光”去掉?...
- thinkpad 开启虚拟服务器,ThinkPad笔记本怎么开启处理器虚拟化技术
- linux tar 打包排除指定目录
- 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 2
- 代码审计之企业级进销存管理系统
- 【转载】7个最佳的双因素认证解决方案
- WebStorm中TODO的作用
- 如何绘制论文中的图表
- PHP 中的 cURL 爬虫实战基础
- python拼音名_Python汉字转换成拼音
- burpsuite激活
- ICON艾肯VST声卡驱动官方原版新款ProDriver-4.0.1全系列下载安装教程
- Arduino按键控制MP3模块随机播放音乐(YX5300 MP3音乐模块)
- ESP32 web WiFi 管理器esp32-wifi-manager
热门文章
- IOS之截取特定字符串
- mysql代表单个字符_mysql字符编码以及字符序
- 太阳能计算机作文500字,自制太阳能热水器
- actorx importer 下载_红色新店开业无线端PSD模板_psd素材免费下载_ 640*6001像素(编号:13631922)...
- python的线性链表_Python线性表——单链表-阿里云开发者社区
- 光纤收发器的原理及应用_光纤收发器的几种常规应用
- php通用下载方法,php实现当前页面点击下载文件的简单方法
- 网络设置巨形帧_网络工程师笔记:VLAN技术
- 计算机理论专业研究生论文课题,计算机理论方向论文选题 计算机理论论文标题如何定...
- Gartner公布2017年十大战略科技发展趋势