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-两个排序数组的中位数

中位数: 给定一个未排序的整数数组,找到其中位数。

两个排序数组的中位数

两个排序数组的中位数

寻找两个有序数组的中位数

寻找两个有序数组的中位数