要求一个数左侧的数都比它小右侧的数都比他大.
对题目的理解为放置在正确位置的数都是答案,所以创建了两个数组a[]和b[],把a的值给b然后对b冒泡排序,然后依次比较a[i]和b[i],如果两者相等就是pivot
写了两种代码但都只能完成测试点1,其他都是运行超时或者段错误,不是很懂,下回再看看。
#include<stdio.h>
/*
int main(){
int N;
scanf("%d",&N);
int a[1000],b[1000];
for(int i=0;i<N;i++) {
scanf("%d",&a[i]);
b[i]=1;
}
for(int i=0;i<N;i++){
if(i==0){
for(int j=i+1;j<N;j++){
if(a[j]<a[i]){
b[i]=0;
break;
}
}
}
else if(i==N-1){
for(int j=0;j<i;j++){
if(a[j]>a[i]){
b[i]=0;
break;
}
}
}
else {
for(int j=0;j<i;j++){
if(a[j]>a[i]){
b[i]=0;
break;
}
}
for(int j=i+1;j<N;j++){
if(a[j]<a[i]){
b[i]=0;
break;
}
}
}
}
int count =0;
for(int i=0;i<N;i++){
if(b[i]) count++;
}
printf("%d\n",count);
int i=0;
while(!b[i]) i++;
printf("%d",a[i]);
i++;
while(a[i]){
if(b[i]) printf(" %d",a[i]);
i++;
}
return 0;
}*/
int main(){
int N;
scanf("%d",&N);
int a[100008],b[100008];
for(int i=0;i<N;i++) {
scanf("%d",&a[i]);
b[i]=a[i];
}
for(int i=0;i<N-1;i++){
for(int j=0;j<N-i-1;j++){
if(b[j]>b[j+1]){
int x=b[j];
b[j]=b[j+1];
b[j+1]=x;
}
}
}
int count=0;
for(int i=0;i<N;i++){
if(a[i]==b[i]) count++;
}
printf("%d\n",count);
if(!count) printf("\n");
int c=0;
for(int i=0;i<N;i++){
if(a[i]==b[i]&&!c) {
printf("%d",a[i]);
c++;
continue;
}
if(a[i]==b[i]) printf(" %d",a[i]);
}
return 0;
}
则为所要的解。