PAT Basic Level 1045 快速排序

题目链接:

https://pintia.cn/problem-sets/994805260223102976/problems/994805278589960192

超时代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <string.h>
using namespace std;

const int maxn=100010;
int a[maxn];//记录输入元素
int b[maxn];//记录可能为主元的元素

int main(){
    int n;
    cin>>n;
    int cnt=0;//记录主元个数
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        bool left_flag=true;//主元左边元素是否都小于主元
        bool right_flag=true;//主元右边元素是否都大于主元
        for(int j=1;j<i;j++){
            if(a[j]>a[i]){
                left_flag=false;
                break;
            }
        }
 //       cout<<left_flag<<endl;//错误判断
        for(int j=i+1;j<=n;j++){
            if(a[j]<a[i]){
                right_flag=false;
                break;
            }
        }
//        cout<<right_flag<<endl;//错误判断
        if(left_flag&&right_flag){
            b[cnt++]=a[i];
        }
    }
    cout<<cnt<<endl;
    sort(b,b+cnt);
    for(int i=0;i<cnt;i++){
        if(i==0){
            cout<<b[i];
        }
        else {
            cout<<" "<<b[i];
        }
    }

    return 0;
}

判定结果:

经验:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <string.h>
using namespace std;

const int maxn=100010;
int a[maxn];//记录输入元素
int b[maxn];//记录可能为主元的元素
int c[maxn];//记录原数组排序后的结果

int main(){
    int n;
    cin>>n;
    int cnt=0;//记录可能为主元的个数
    for(int i=0;i<n;i++){//一般情况下,i从0到n,不要用1-n(习惯问题)
        cin>>a[i];
        c[i]=a[i];
    }
    sort(c,c+n);
    int maxn_=0;
    for(int i=0;i<n;i++){
        if(maxn_<a[i])
        //找到前i个元素中最大的,
            maxn_=a[i];
        if(a[i]==c[i]&&c[i]==maxn_){
        //1,主元应该在排序完之后,位置不变
        //2,第i个元素应该比前i个的最大值大,后面的元素一定比第i个元素大(因为排完序了)
            b[cnt++]=a[i];
        }
    }

    cout<<cnt<<endl;
    if(cnt==0)
        cout<<endl;//如果主元个数为0,输出空行(测试点2:格式错误)
    sort(b,b+cnt);
    for(int i=0;i<cnt;i++){
        if(i==0){
            cout<<b[i];
        }
        else {
            cout<<" "<<b[i];
        }
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41755143/article/details/86545522