//寻找两个有序数组的中位数
/*
1)先将两个有序数组进行按顺序合并[类似链表的思想]
2)寻找中位数
*/
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1=nums1.length;
int len2=nums2.length;
//定义一个计数变量
int i=0,j=0,k=0;
//定义一个新的数组,存放合并后的数
int[] merge=new int[len1+len2];
while(i<len1||j<len2){
if(i<len1&&j<len2){
if(nums1[i]<nums2[j]){
merge[k]=nums1[i];
k++;
i++;
}else{
merge[k]=nums2[j];
k++;
j++;
}
}
else if(i<len1){
merge[k]=nums1[i];
k++;
i++;
}
else if(j<len2){
merge[k]=nums2[j];
k++;
j++;
}
}
//对合并后的数组查找中位数
int len3=merge.length;
//为偶数
if(len3%2==0){
return (merge[len3/2]+merge[len3/2-1])/2.0;
}else{
return merge[len3/2];
}
}
package com.lz;
import java.util.Scanner;
import com.lz.Solution;
public class Test {
public static void main(String[] args){
//创建对象
Solution solution = new Solution();
Scanner sc=new Scanner(System.in);
while(true){
//输入数组nums1和数组nums2的长度
System.out.println("请输入数组1的长度:");
int len1=sc.nextInt();
System.out.println("请输入数组2的长度:");
int len2=sc.nextInt();
//创建数组1和数组2 按顺序
int[] nums1=new int[len1];
int[] nums2=new int[len2];
System.out.println("请输入数组1的数值");
for(int i=0;i<len1;i++){
nums1[i]=sc.nextInt();
}
System.out.println("请输入数组2的数值");
for(int j=0;j<len2;j++){
nums2[j]=sc.nextInt();
}
double a;
a=solution.findMedianSortedArrays(nums1,nums2);
System.out.println("中位数:"+a);
}
}
}
结果: