在线考试
编程题|20.0分2/3
合并数组的的中位数
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
两个已排好序的数组,找出两者合并后的数组的中位数。
例如:
给出A=[1,2,3,4,5,6]和B=[2,3,4,5],它们合并后的数组是[1,2,3,4,5,6],合并后数组的中位数是3.5(注:(3+4)/2)。
给出A=[1,2,3]和B=[4,5],它们合并后的数组是[1,2,3,4,5],合并后数组的中位数是3。
输入
第一行读入一个正整数n,表示第一个数组的元素个数,第二行读入n个递增整数,表示第一个排好序的数组,第三行读入一个正整数m,表示第二个数组的元素个数,第四行读入m个递增整数,表示第二个排好序的数组
样例输入
6
1 2 3 4 5 6
4
2 3 4 5
<div class="outputarea yangli ng-scope" ng-if="model.ques.questype==6 && model.ques.outputSample != null && model.ques.outputSample!=''" "="" style="box-sizing: border-box; margin: 0px; padding: 0px;">
样例输出
3.5
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
ArrayList<Integer> aList = new ArrayList<>();
ArrayList<Integer> bList = new ArrayList<>();
for (int i = 0; i < n; i++) {
aList.add(in.nextInt());
}
int m = in.nextInt();
for (int j = 0; j < m; j++) {
bList.add(in.nextInt());
}
aList=sort(aList,bList);
if(aList.size()%2==0){
double sum=(aList.get(aList.size()/2)*1.0+aList.get(aList.size()/2-1))/2;
System.out.println(sum);
}else{
System.out.println((double)aList.get(aList.size()/2));
}
}
public static ArrayList<Integer> sort(ArrayList<Integer> a, ArrayList<Integer> b) {
int i = a.size() - 1;
int j = 0;
if (b.get(j) >= a.get(i)) {
a.addAll(b);
return a;
}
i = 0;
while (i < a.size() && j < b.size()) {
if (a.get(i) > b.get(j)) {
a.add(i, b.get(j));
j++;
i++;
} else if (b.get(j) == a.get(i)) {
i++;
j++;
} else {
if (i == (a.size() - 1) || j == (b.size() - 1)) {
for (; j < b.size(); j++) {
a.add(i + 1, b.get(j));
i++;
}
} else {
i++;
}
}
}
return a;
}
}