设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。试着设计一个O(logn)时间的算法,找出X和Y的2n个数的中位数。
*输入:
第一行: n, 为x和y数组的元素个数
第二行: x 数组的n个数,用空格分隔
第三行: y 数组的n个数,用空格分隔
输出:中位数两个,用空格分隔
答:
源代码:
package aa;
import java.util.Scanner;
public class Main{
public static void main(String[] args)throws Exception{
Scanner input=new Scanner(System.in);
int n = input.nextInt();
int arr1[] = new int[n];
int arr2[] = new int[n];
for(int i=0;i<n;i++){
arr1[i]=input.nextInt();
}
for(int i=0;i<n;i++){
arr2[i]=input.nextInt();
}
int arr3[] = new int[2*n];
int t1=0;
int t2=0;
for(int i= 0;i < 2*n;i++){
if(arr1[t1]<=arr2[t2]) {
arr3[i] = arr1[t1];
t1++; }
else{
arr3[i] = arr2[t2];
t2++; }
if(t1==n){
for(int j =0;j<(2*n-t1-12);j++){
arr3[t1+12+j]=arr2[t2+j];}
break;}
if(t2==n) {
for(int j=0;j<(2*n-t1-t2);j++) {
arr3[t1+t2+j]=arr1[t1+j];
}
break;
}
}
System.out.print(arr3[n-1]+" "+arr3[n]);
}
}
运行截图: