两个有序序列的中位数
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列,的中位数指A(N-1)/2的值,即第(N+1)/2个数(A0为第1个数)。
输入格式:
输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的并集序列的中位数。
输入样例1:
5
1 3 5 7 9
2 3 4 5 6
输出样例1:
4
输入样例2:
6
-100 -10 1 1 1 1
-50 0 2 3 4 5
输出样例2:
1
思路:建立一个数组,长度为两个序列的总和,将序列中所有数字排序并且存入数组中,然后进行判断。
1 #include<stdio.h> 2 int main() 3 { 4 int i,k=0,l=0,n; 5 int mid; 6 scanf("%d",&n); 7 int a[n],b[n],c[2*n]; 8 for(i=0;i<n;i++){ 9 scanf("%d",&a[i]); 10 } 11 for(i=0;i<n;i++){ 12 scanf("%d",&b[i]); 13 } 14 i=0; 15 while(k<n&&l<n){ 16 if(a[k]>b[l]){ 17 c[i++]=b[l++]; 18 }else{ 19 c[i++]=a[k++]; 20 } 21 } 22 while(k<n){ 23 c[i++]=a[k++]; 24 } 25 while(l<n){ 26 c[i++]=a[l++]; 27 } 28 mid=c[(i-1)/2]; 29 printf("%d",mid); 30 return 0; 31 }