首页 > 代码库 > 两组有序数列的中位数
两组有序数列的中位数
两组升序排列的数组A[m]和B[n], 求他们的中位数。
注意,中位数的概念哦~相信你会百度一下的~
格式:
第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数。两个数组的长度都不超过1000。
注意,需要保留5位小数哦~所以,你设计函数的时候请设计成double类型哦~
样例输入
1351 2 4 5 6
样例输出
3.50000
package jsk;import java.util.Scanner;public class Main23 { private static Scanner input; public static void main(String[] args) { //两组升序排列的数组A[m]和B[n],求他们的中位数 input = new Scanner(System.in); int m = input.nextInt(); int [] array1 =new int[m]; init(array1); int n = input.nextInt(); int [] array2 = new int[n]; init(array2); //把这两个数组合并起来 mearge(array1,array2); } private static void init(int [] array) { for (int i =0;i<array.length;i++) { array[i] = input.nextInt(); } } public static void mearge(int[]array1,int[]array2){ int p1 = array1.length-1; int p2 = array2.length-1; //循环遍历array1,array2,然后合并起来 int newLength = array1.length+array2.length-1; int [] newArray = new int[newLength+1]; while (p1 >= 0 && p2 >= 0) {//二者长度相等部分 if (array1[p1] >= array2[p2]) { newArray[newLength] = array1[p1]; p1--; newLength--; } else { newArray[newLength] = array2[p2]; newLength--; p2--; } } //假设a数组多出来 while (p1 >=0) { newArray[newLength] = array1[p1]; newLength--; p1--; } //假设b数组多出来 while (p2 >=0) { newArray[newLength] = array2[p2]; newLength--; p2--; } //求中位数,如果这这个中位数是奇数的,直接取中间的数,如果是偶数的话取中间减一,加一两个数的平均数 if (newArray.length%2 == 1) { System.out.println(newArray[newArray.length/2+1]); }else{ int number1 = newArray[newArray.length/2]; int number2 = newArray[newArray.length/2-1]; System.out.printf("%.5f",(double)(number1+number2)/2); } } }
两组有序数列的中位数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。