PAT甲级-逻辑题类型-1101 Quick Sort解题思路

1101 Quick Sort (25 分)

在这里插入图片描述

思路

不需要考虑空间,考虑时间即可。
多开几个空间,使用 O ( n ) O(n) O(n)而不是 O ( n 2 ) O(n^2) O(n2)

输出格式问题,一般是没有输出,但需要回车,cout<<endl;即可

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
    int n;
    cin>>n;
    int num[100005];
    int min_n[100005];
    int max_n[100005];
    bool flag[100005] ={
    
    0};
    for(int i=1;i<=n;i++)
        cin>>num[i];

    int sum = 0;

    
    min_n[0] =  num[0] = 0;
    max_n[n+1] = num[n+1] = 1000000001;
    for(int i =1;i<=n+1;i++)
        min_n[i] = max(min_n[i-1],num[i-1]);

    for(int i =n;i>=0;i--)
        max_n[i] = min(max_n[i+1],num[i+1]);

    for(int i =1;i<=n;i++)
        if(num[i]>min_n[i] && num[i]<max_n[i]){
    
    sum+=1;flag[i]=1;}

    cout<<sum<<endl;
    int count = 0;
    for(int i =1;i<=n;i++)
    {
    
    
        if(flag[i]==1)
        {
    
       count +=1;
            if(count==sum)cout<<num[i];
            else cout<<num[i]<<" ";
        }
    }
    cout<<endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_43999137/article/details/114631244