java 两个排序数组的中位数 - 找两个有序数组的中位数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 两个排序数组的中位数 - 找两个有序数组的中位数相关的知识,希望对你有一定的参考价值。
double findKth(int[] a,int m,int [] b,int n,int k){
if(m > n) return findKth(b,n,a,m,k);
if (m==0) return b[k-1];
if(k==1) return min(a[0],b[0]);
int pa = min(k/2,m),pb=k-pa;
int[] left_arr= new int[m-pa];
System.arrayCopy(a,pa+1,left_arr,0,m-pa);
if(a[pa-1] < b[pb-1]) return findKth(left_arr,m-pa,b,n,k-pa);//a的中位数小于b的,则需要剪掉a前半段
int[] right_arr = new int[n-pb];
System.arrayCopy(b,pb+1,right_arr,0,n-pb);
if(a[pa-1] > b[pb-1]) return findKth(a,m,right_arr,n-pb,k-pb);//a的中位数大于b的则需要剪掉b的前半段
return a[pa-1];//如果a的中位数和b的中位数相等则直接返回。
}
public double midValue(int [] a,int [] b,int m,int n){
int t = m+n;
if(t%2==1)
return findKth(a,m,b,n,t/2+1);
else
return (findKth(a,m,b,n,t/2)+findKth(a,m,b,n,t/2+1))/2;
}
以上是关于java 两个排序数组的中位数 - 找两个有序数组的中位数的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode-两个排序数组的中位数
中位数: 给定一个未排序的整数数组,找到其中位数。
两个排序数组的中位数
两个排序数组的中位数
寻找两个有序数组的中位数
寻找两个有序数组的中位数