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;
}