PAT甲题题解-1101. Quick Sort (25)-大水题

Posted 辰曦~文若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲题题解-1101. Quick Sort (25)-大水题相关的知识,希望对你有一定的参考价值。

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

  大水题,正循环和倒着循环一次,统计出代码中的minnum和maxnum即可,注意最后一定要输出\'\\n\',不然第三个测试会显示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\\n",cnt);
    if(cnt>=1)
        printf("%d",res[0]);
    for(int i=1;i<cnt;i++){
        printf(" %d",res[i]);
    }
    printf("\\n");//不加这个第三个测试竟然过不去
    return 0;
}
View Code

 

以上是关于PAT甲题题解-1101. Quick Sort (25)-大水题的主要内容,如果未能解决你的问题,请参考以下文章

PAT_A1101#Quick Sort

PAT甲级——A1101 Quick Sort

PAT Advanced 1101 Quick Sort (25分)

1101. Quick Sort (25)快排——PAT (Advanced Level) Practise

1101. Quick Sort (25)快排——PAT (Advanced Level) Practise

1101. Quick Sort (25)快排——PAT (Advanced Level) Practise