栈和排序 题解

栈和排序

https://ac.nowcoder.com/acm/problem/14893

一个简单的贪心做法(已通过@7QQQQQQQ大佬的hack数据)

我们设maxe[i]表示i-n的元素的最大值。

那么,我们假设,当前栈顶的元素比maxe[i+1]大(最近入栈的是第i个元素),那么,不难发现,如果我们当前元素不出栈的话,之后如果有元素入栈,那么最后出栈的字典序一定会小于当前元素出栈的字典序。于是按照这个策略模拟即可~

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+2;
int a[N],maxe[N],sta[N],top;
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    for(int i=n;i;--i){
        maxe[i]=max(maxe[i+1],a[i]);
    }
    for(int i=1;i<=n;++i){
        sta[++top]=a[i];
        while(top&&sta[top]>maxe[i+1]){//因为maxe[n+1]=0,所以最后一定会把栈弹空
            printf("%d ",sta[top--]);
        }
    }
    return 0;
}
全部评论
#include"bits/stdc++.h" using namespace std; stack<int> k; int main(){ int n; cin>>n; int j=0; for(int i=1;i<=n;i++){ int x; cin>>x; k.push(x); while(!k.empty()&&k.top()==n-j){ j++; cout<</int>
点赞 回复 分享
发布于 2023-07-27 01:15 湖南
为啥我直接判断是不是当前可能的最大值输出不行?https://ac.nowcoder.com/acm/problem/14893
点赞 回复 分享
发布于 2023-07-27 01:14 湖南
这个题数据修过了,现在欢迎重新提交
点赞 回复 分享
发布于 2020-06-09 11:03
tql
点赞 回复 分享
发布于 2020-05-29 09:59

相关推荐

昨天 16:52
已编辑
门头沟学院 Java
周五投的,流程今天结束
投递地平线等公司7个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
24
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务