zoukankan      html  css  js  c++  java
  • 济南学习 Day1 T2 pm

    【问题描述】
    栈是一种强大的数据结构,它的一种特殊功能是对数组进行排序。例如,借
    助一个栈,依次将数组 1,3,2 按顺序入栈或出栈,可对其从大到小排序:
    1 入栈;3 入栈;3 出栈;2 入栈;2 出栈;1 出栈。
    在上面这个例子中,出栈序列是 3,2,1,因此实现了对数组的排序。
    遗憾的是,有些时候,仅仅借助一个栈,不能实现对数组的完全排序。例如
    给定数组 2,1,3,借助一个栈,能获得的字典序最大的出栈序列是 3,1,2:
    2 入栈;1 入栈;3 入栈;3 出栈;1 出栈;2 出栈。
    请你借助一个栈,对一个给定的数组按照出栈顺序进行从大到小排序。当无
    法完全排序时,请输出字典序最大的出栈序列。
    【输入格式】
    输入共2行。
    第一一个整数N,表示入栈序列长度。
    第二行包含N个整数,表示入栈序列。输入数据保证给定的序列是1到 N 的全
    排列,即不会出现重复数字。
    【输出格式】
    仅一行,共N个整数,表示你计算出的出栈序列。
    【样例输入】
    3
    2 1 3
    【样例输出】
    3 1 2
    【样例解释】
    这回山里有座塔。
    【数据规模与约定】
    3 3 。
    60%的数据,1 ≤ N ≤ 10 ^5 。
    对于100%的数据,1 ≤ N ≤ 10 ^6 。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<stack>
     5 #define MAXN 100000
     6 using namespace std;
     7 int q[MAXN];
     8 int a[MAXN],n,vis[MAXN],team;
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     for(int i=1;i<=n;i++)
    13         scanf("%d",&a[i]);
    14     int k=n,head=1;
    15     while(k)
    16     {
    17         while(vis[k]) k--;
    18         if(k==0)
    19         {
    20             for(int i=team;i>=1;i--)
    21               printf("%d ",q[i]);
    22             
    23             return 0;
    24         }
    25         while(q[team]>k)
    26         {
    27             printf("%d ",q[team]);
    28             team--; 
    29         }
    30         while(a[head]!=k)
    31         {
    32             q[++team]=a[head];
    33             vis[a[head]]=true;
    34             head++;
    35         }
    36         printf("%d ",a[head]);
    37         head++;k--;
    38     }
    39     return 0;
    40 }

    思路:首先贪心最大的肯定要排在第一个,即最大的之前的要全部push,接下来肯定是N-1这个数最大,如果他没有进栈,那么一直push到它进栈,如果它已经进栈,那么比较栈顶与要进栈的最大数比较最大的输出。后面最大的数直接用while判断是否进栈即可。代码是手写的栈

  • 相关阅读:
    FastAPI(60)- 针对 WebSocket 进行单元测试
    FastAPI(59)- 详解使用 OAuth2PasswordBearer + JWT 认证
    FastAPI(58)- 使用 OAuth2PasswordBearer 的简单栗子
    FastAPI(57)- 安全相关的概念
    FastAPI(56)- 使用 Websocket 打造一个迷你聊天室
    FastAPI(55)- Events: startup
    FastAPI(54)- 详解 Request 请求对象
    FastAPI(53)- Response Headers 响应设置 Headers
    FastAPI(52)- Response Cookies 响应设置 Cookies
    FastAPI(51)- 自定义响应之 StreamingResponse、FileResponse
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6034913.html
Copyright © 2011-2022 走看看