PAT(Basic Level) Practice : 1045 快速排序 (25分)

1045 快速排序 (25分)

参考:> https://www.cnblogs.com/fromzore/p/9600974.html

思路

用两重循环当然超时,使用algorithm中的sort,或者自己写快排,进行排序
快排前后基准数的位置是相对不变的,所以找到所有相同位置的数
但是仅仅有这一个条件不够
3 2 1 4 5,很明显2不是基准数,但是排序后1 2 3 4 5,2的位置是符合条件的
所以我们设定一个max,从未排序的数组从前往后不停的更新,如果位置i的值与排序后i的值相同,且与max的值相同,则满足条件。

代码

#include <iostream>
#include"stdlib.h"
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;

#include<iomanip>
//精度

#include<cmath>
//round四舍五入取整


int main()
{
    int num;
    cin>>num;
    vector<int> nums,nums1;

    for(int i=0;i<num;i++)
    {
        int t;
        cin>>t;
        nums.push_back(t);
    }
    nums1=nums;
   
    sort(nums.begin(),nums.end());
    vector<int> res;
    int max=nums[0];
    for(int i=0;i<num;i++)
    {
        if(nums1[i]>max)
        {
            max=nums1[i];
        }

        if(nums1[i]==nums[i]&&nums[i]==max)
        {
            res.push_back(nums1[i]);
        }
    }

    cout<<res.size()<<endl;
    if(res.size()==0)
        cout<<endl;
    else if(res.size()==1)
    {
        cout<<res[0]<<endl;
    }else
    {
        for(int i=0;i<res.size()-1;i++)
        {
            cout<<res[i]<<" ";


        }
        cout<<res[res.size()-1]<<endl;
    }
    return 0;
}

posted @ 2020-09-25 14:48  韩天尊  阅读(89)  评论(0)    收藏  举报