先给一种解法(感觉是因为这题时间限制没有那么大,所以这种解法也可以,但是还是要学会最优解)
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000100;
int n,m,a[maxn];
int main()
{
scanf("%d",&n);
for (int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for (int i=n;i<m+n;i++)
scanf("%d",&a[i]);
sort(a,a+n+m);
n=(n+m-1)/2;
printf("%d",a[n]);
}
Two points解法
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000010;
const int inf=0x7fffffff;
int s1[maxn],s2[maxn];
int main()
{
int n,m,i,j;
cin>>n;
for (i=0;i<n;i++)
scanf("%d",&s1[i]);
cin>>m;
for ( i=0;i<m;i++)
scanf("%d",&s2[i]);
int mid=(n+m-1)/2;
int count =0;
s1[n]=inf;
s2[m]=inf;
i=0,j=0;
while (count<mid)
{
if (s1[i]<s2[j])i++;
else j++;
count++;
}
if (s1[i]<s2[j])
printf("%d",s1[i]);
else
printf("%d",s1[j]);
}