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
这个题数据修过了,现在欢迎重新提交
点赞 回复 分享
发布于 2020-06-09 11:04
现在感觉也不太对呀,样例5 4 2 3 1过不了 预期输出:5 4 3 2 1 实际输出:5 4 3 1 2
点赞 回复 分享
发布于 2022-10-15 18:43 湖南

相关推荐

真得找个班上:真是白嫖学生劳动力脸都不要了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务