快速排序找pivot
语言:C++
#include<iostream>
#include<vector>
#include<algorithm>
#include<climits>
using namespace std;
int N;
int main(){
cin>>N;
vector<int> a(N), b(N); // 以空间换取时间,声明两个数组
for(int j=0; j<N; j++){
scanf("%d", &a[j]);
b[j] = a[j];
}
sort(a.begin(), a.end()); // 升序排列 ascending
vector<int> result;
int max = INT_MIN;
for(int i=0; i<N; i++){
if(a[i]==b[i] && b[i]>max){ // 如果排序后,位置没有变,且比之前的最大值都大
result.push_back(b[i]);
}
if(b[i]>max){ // 无论是否满足位置不变,都更新最大值max的值
max = b[i];
}
}
int size = result.size();
cout<<size<<endl;
for(int i=0; i<size; i++){
printf("%d%s", result[i], i==size-1?"":" ");
}
printf("\n");
return 0;
}
/* 会超时!!
#include<iostream>
#include<vector>
// #include<cmath>
#include<climits>
using namespace std;
int N;
vector<int> numbers;
int main(){
cin>>N;
numbers.resize(N);
vector<int> judge = {0};
judge.resize(N);
for(int j=0; j<N; j++){
scanf("%d", &numbers[j]);
}
int pivot, num = N;
for(pivot = 0; pivot<N; pivot++){
for(int i=0; i<N; i++){
if((i<pivot && numbers[i]>numbers[pivot]) || (i>pivot && numbers[i]<numbers[pivot])){
judge[pivot] = 1;
num--;
break;
}
}
}
cout<<num<<endl;
for(int i=0; i<N; i++){
if(!judge[i]){
--num;
printf("%d%s", numbers[i], num==0?"\n":" ");
}
}
return 0;
}
*/