方法:用双指针的方法逐个比较,更高效的方法可以用类似二分的方法进行比较。此外,直接排序也能通过。
注意点:两个数组最后需要添加一个无穷大的数,避免一个数组的多数值大于另一个数组的所有值。
#include <iostream>
const int maxn=200010;
const int INF=2000000000;
int s1[maxn],s2[maxn];
int main(){
int num1,num2;
scanf("%d",&num1);
for(int i=0;i<num1;i++)
scanf("%d",&s1[i]);
scanf("%d",&num2);
for(int i=0;i<num2;i++)
scanf("%d",&s2[i]);
s1[num1]=s2[num2]=INF;
for(int i=0,j=0;i<=num1&&j<=num2;){
if(s1[i]<s2[j]){
if(i+j+1==(num1+num2+1)/2){
printf("%d",s1[i]);
break;
}
i++;
}else{
if(i+j+1==(num1+num2+1)/2){
printf("%d",s2[j]);
break;
}
j++;
}
}
return 0;
}
也可直接排序:
#include <iostream>
#include <algorithm>
using namespace std;
long long a[2000010];
int main(){
int pos=0,num1,num2;
scanf("%d",&num1,&num2);
for(;pos<num1;pos++)
scanf("%lld",&a[pos]);
scanf("%d",&num2);
num2+=num1;
for(;pos<num2;pos++)
scanf("%lld",&a[pos]);
sort(a,a+num2);
printf("%lld",a[(num2-1)/2]);
return 0;
}