NC14893栈和排序

栈和排序

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

原题链接:传送门

思路:其实就是模拟栈的排序顺序,我们让每个数按照他的顺序进栈,在进栈的过程中用一个cnt=n来标记,当前进栈的数满足s.top==cnt时,说明此时已达到了出栈条件,(因为是从大到小排序的)所以我们让当前的数出栈,(然后cnt--,继续寻找下一个出栈条件)当所有的数都进栈后,剩下还没出栈的我们让他所有的都出栈,这就可以满足字典序最大的出栈序列

#include<iostream>
#include<stack>

using namespace std;
const int N=1e6+5;
int a[N];

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    int cnt=n;
    stack<int>s;
    for(int i=0;i<n;i++)
    {
        if(s.empty())//当前空栈直接进栈,同时判断是否满足出栈条件
        {
            s.push(a[i]);
            if(s.top()==cnt)
            {
                printf("%d ",s.top());
                s.pop();
                cnt--;
            }
        }
        else if(s.top()==cnt)//不空的栈判断是否满足条件
        {
            printf("%d ",s.top());
            s.pop();
            cnt--;
            s.push(a[i]);
        }
        else s.push(a[i]);//不满足的条件记得继续入栈
    }    
    while(!s.empty())//最后把未出栈的出栈
    {
        printf("%d ",s.top());
        s.pop(); 
    }
    return 0;
}
全部评论
这答案感觉不太对啊 10 5 4 3 2 1 9 10 8 6 7 比如用这组数据的话就不对
1 回复 分享
发布于 2022-01-28 15:09
现在感觉也不太对呀,样例5 4 2 3 1过不了 预期输出:5 4 3 2 1 实际输出:5 4 3 1 2
点赞 回复 分享
发布于 2022-10-15 18:43 湖南
这个题数据修过了,现在欢迎重新提交
点赞 回复 分享
发布于 2020-06-09 11:04

相关推荐

不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
点赞 评论 收藏
分享
身边有人上海、深圳&nbsp;6、7k&nbsp;都去了,真就带薪上班了。
小浪_coder:深圳除了一些计算机,UI设计,金融类等一些可以月薪过万的工作之外, 认识很多朋友做运营,营销,文员的工作, 月薪基本都在4-6K左右,还有大把人在干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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