目录
题目描述
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,⋯,AN−1的中位数指A(N−1)/2的值,即第⌊(N+1)/2⌋个数(A0为第1个数)。
输入
输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。
输出
在一行中输出两个输入序列的并集序列的中位数。
输入样例
5
1 3 5 7 9
2 3 4 5 6
输出样例
4
思路分析
建一个新的数组来存放了S1与S2的并集,升序排序后返回第[(N+1)/2]个数就好。这道题也不难,但是实验课卡住了很久很久,因为有个坑!这里的并集与数学上的并集不相同,这里的并集可以有重复的元素!
AC代码
#include<iostream>
using namespace std;
int main(){
int n,temp;
cin>>n;
int A1[n];
int A2[n];
for(int i=0;i<n;i++)
cin>>A1[i];
for(int i=0;i<n;i++)
cin>>A2[i];
int B[2*n];
for(int i=0;i<2*n;i++)
{
if(i<n) B[i]=A1[i];
else B[i]=A2[i-n];
}
for(int i=0;i<2*n-1;i++){
for(int j=0;j<2*n-i;j++){
if(B[j]>B[j+1]) {
temp=B[j];
B[j]=B[j+1];
B[j+1]=temp;
}
}
}
cout<<B[(2*n-1)/2];
return 0;
}