我的
#include<stdio.h>
int main(){
int n,cnt=0,flag1,flag2,max=0,min=10000000;
scanf("%d",&n);
int a[n],b[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>max) max=a[i];
if(a[i]<min) min=a[i];
}
for(int i=0;i<n;i++){
if(i==0){
if(a[i]==min) b[cnt++]=a[i];
}
else if(i==n-1){
if(a[i]==max) b[cnt++]=a[i];
}
else{
flag1=0,flag2=0;
for(int j=0;j<i;j++){
if(a[j]>a[i]){
flag1=-1;
break;
}
}
for(int k=i+1;k<n;k++){
if(a[k]<a[i]){
flag2=-1;
break;
}
}
if(flag1==0&&flag2==0) b[cnt++]=a[i];
}
}
printf("%d\n",cnt);
for(int i=0;i<cnt;i++){
if(i==0) printf("%d ",b[i]);
else printf(" %d",b[i]);
}
printf("\n");
return 0;
}
几个点运行超时
直接上大佬代码
#include<stdio.h>
#include<stdlib.h>
int main(){
int cnt;
scanf("%d",&cnt);
int sp[100001][3],dp[100001];
for(int i=0;i<cnt;i++)
scanf("%d",&sp[i][0]);
int leftmax=0;
for(int i=0;i<cnt;i++){
sp[i][1]=leftmax;
if(sp[i][0]>leftmax)
leftmax=sp[i][0];
}
int rightmin=1<<30;//<<移位符
for(int i=cnt-1;i>=0;i--){
sp[i][2]=rightmin;
if(sp[i][0]<rightmin)
rightmin=sp[i][0];
}
int index=0,sum=0;
for(int i=0;i<cnt;i++){
int ok=1;
if(sp[i][1]>=sp[i][0]) ok=0;
if(sp[i][2]<=sp[i][0]) ok=0;
if(ok){
sum++;
dp[index++]=sp[i][0];
}
}
printf("%d\n",sum);
for(int i=0;i<index;i++){
printf("%d",dp[i]);
if(i!=index-1) putchar(' ');
}
putchar('\n');
return 0;
}
还有的大佬又开一个数组储存顺序时的数,将相同位置的进行比较,只有相等时可能是主元