1045 快速排序 测试点2格式错误问题解决
作者:互联网
问题
测试点2格式错误,测试点2是0个可能的主元的情况,这里需要额外再加一个换行才能ac(原因不解)
思路
设置三个数组A、B、C,第一个数组A存放原本的排列,第二个数组B里的每个位置对应数组A相应位置向左的所有数的最大值,第三个数组C里的每个位置对应数组A相应位置向右的所有数的最小值。
再依次比较三个数组A、B、C,其中三个数组相同位置的数都相等的数就是主元的可能值。
时间复杂度需为o(n)。
代码
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
long long a[100002];
long long b[100002];
long long c[100002];
int main(){
queue<long long> q;
long long cnt=0;
long long n;
cin>>n;
for(long long i=0;i<n;i++){
cin>>a[i];
if(i==0){
b[i]=a[i];
}
else{
if(a[i]>b[i-1]){
b[i]=a[i];
}
else{
b[i]=b[i-1];
}
}
}
for(long long i=n-1;i>=0;i--){
if(i==n-1){
c[i]=a[i];
}
else{
if(a[i]<c[i+1]){
c[i]=a[i];
}
else{
c[i]=c[i+1];
}
}
}
for(long long i=0;i<n;i++){
if((a[i]==b[i])&&(a[i]==c[i])){
cnt++;
q.push(a[i]);
}
}
if(cnt==0){
cout<<0<<endl<<endl;
}
else{
cout<<cnt<<endl;
}
int f=0;
while(q.empty()==0){
if(f==0){
cout<<q.front();
q.pop();
}
else{
cout<<" "<<q.front();
q.pop();
}
f=1;
}
return 0;
}
标签:include,测试点,1045,long,else,数组,100002,排序 来源: https://www.cnblogs.com/wodeblog1982/p/16460722.html