题目:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
思路:
直接将两个数组合并成一个数组,再将合并后的新数组进行排序。这里有两种情况:
数组长度是奇数还是偶数,如果数组长度为2的倍数(偶数),则直接找中间两个数相加再除以2,那么中位数为:(twoInt[test]+twoInt[test-1])/2;
如果为奇数,直接找中间的数字除以2,则直接return twoInt[(n-1)/2]。
package Lq_算法练习;
import java.util.Arrays;
public class Dem_寻找中位数 {
public static void main(String[] args) {
int[] a= {1,3,6};
int[] b= {5,8,3,4};
double res=findArray(a,b);
System.out.println("中位数是:"+res);
}
//方法一
public static double findArray(int[] num1,int[] num2) {
//将两个数组进行合并
int[] twoInt=Arrays.copyOf(num1, num1.length+num2.length);
//这里是将数组num1复制给twoInt数组,长度为num1.length+num2.length
System.arraycopy(num2,0,twoInt,num1.length,num2.length);
//这个地方就是将num2数组从下标为0开始拷贝num2.length个数拷贝到数组twoInt数组中
/*
1.System.arraycopy()方法复制指定的源数组的数组,在指定的位置开始,到目标数组的指定位置
2.System.arraycopy(nums1,0,nums2,0,m);
将数组nums1中从下标0开始的m个数拷贝到数组nums2中,在数组nums2中的存放从下标0开始。
*/
//排序
Arrays.sort(twoInt);
int n=twoInt.length;
int test=n/2;
if(n%2==0) {
return (twoInt[test]+twoInt[test-1])/2;
}else {
return twoInt[(n-1)/2];
}
}
}
运行结果: