1101. Quick Sort

这里写图片描述

这道题想找到一组数据中满足,左边的数字都小于它,右边的数字都大于它的数字。
最暴力的方法n^2会超时
这道题的Quick Sort实际上已经提示我们了,这道题的重点在于发现符合题目条件的数字在sort之后的位置是相同的,这一点回想quick sort过程就很容易验证,并且保证数组中的数字要大于前面数字的最大值,就会满足题意,复杂度体现在排序上,为O(nlogn).
具体代码如下:

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;

vector<int> res;
int a[100005];
int b[100005];
int MAX=0;

int main()
{
    int k;
    scanf("%d",&k);
    vector<int> res;
    for(int i=0;i<k;++i)
    {
        scanf("%d",&a[i]);
        b[i]=a[i];
    }
    sort(a,a+k);
    for(int i=0;i<k;++i)
    {
        if(a[i]==b[i] && b[i]>MAX)
        {
            res.push_back(a[i]);
        }
        if(b[i]>MAX)
        {
            MAX=b[i];
        }
    }
    printf("%lu\n",res.size());
    for(int i=0;i<res.size();++i)
    {
        if(i==0)
            printf("%d",res[i]);
        else
            printf(" %d",res[i]);
    }
    printf("\n");

    return 0;
}

猜你喜欢

转载自blog.csdn.net/github_33873969/article/details/80214146