zoukankan      html  css  js  c++  java
  • PAT甲题题解-1101. Quick Sort (25)-大水题

      快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它。题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来。

      大水题,正循环和倒着循环一次,统计出代码中的minnum和maxnum即可,注意最后一定要输出' ',不然第三个测试会显示PE,格式错误。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <map>
    #include <string>
    #include <string.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    const int maxn=100000+5;
    int num[maxn];
    int minnum[maxn]; //minnum[i]表示第i+1~n中最小的数
    int maxnum[maxn]; //maxnum[i]表示第1~i-1中最大的数
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&num[i]);
        }
        num[0]=0;
        maxnum[0]=0;
        for(int i=1;i<=n;i++){
            maxnum[i]=max(maxnum[i-1],num[i-1]);
        }
        num[n+1]=INF;
        minnum[n+1]=INF;
        for(int i=n;i>=1;i--){
            minnum[i]=min(minnum[i+1],num[i+1]);
        }
        int res[maxn];
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(maxnum[i]<num[i] && num[i]<minnum[i]){
                res[cnt]=num[i];
                cnt++;
            }
        }
        //sort(res,res+cnt);多次一举,因为肯定是从小到大排序的.
        printf("%d
    ",cnt);
        if(cnt>=1)
            printf("%d",res[0]);
        for(int i=1;i<cnt;i++){
            printf(" %d",res[i]);
        }
        printf("
    ");//不加这个第三个测试竟然过不去
        return 0;
    }
    View Code
  • 相关阅读:
    Jenkins操作学习 --邮箱配置及测试结果构建
    Jenkins操作学习 --初始化安装
    Jenkins操作学习 -- 配置及使用
    Jenkins登录后空白页
    Linux-(kill,wc,killall,ln,cal,date)
    Linux-(tar,gzip,df,du)
    Linux-(chgrp,chown,chmod)
    Linux-文件和目录属性
    Linux-(which,whereis,locate,find)
    Linux-(touch,cat,nl,more|less,head|tail)
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6103121.html
Copyright © 2011-2022 走看看