找到两个排序数组的中位数

//找到两个排序数组的中位数
public class GetMedianTwoArr{
	//k为中位数的位置
 public static  double findKth(int a[], int m, int b[], int n, int k)
{
	//always assume that m is equal or smaller than n
	if (m > n)
		return findKth(b, n, a, m, k);
	if (m == 0)
		return b[k - 1];
	if (k == 1)
		return Math.min(a[0], b[0]);
	//divide k into two parts
	int pa = Math.min(k / 2, m), pb = k - pa;
	if (a[pa - 1] < b[pb - 1])
	{
		  int[]str=new int[a.length-pa+1];
		  for(int i=pa;i<a.length;i++)
		  {
		  	     str[i-pa]=a[i];
		  }
		return findKth(str, m - pa, b, n, k - pa);
	}

	else if (a[pa - 1] > b[pb - 1])
	{
		 int[]str2=new int[b.length-pb+1];
		  for(int i=pb;i<b.length;i++)
		  {
		  	     str2[i-pb]=b[i];
		  }

		return findKth(a, m, str2, n - pb, k - pb);
	}
	else
		return a[pa - 1];
}


public static double findMedianSortedArrays(int A[], int m, int B[], int n)
{
		int total = m + n;
		//若为奇数
		if ((total&1)>0)
			return findKth(A, m, B, n, total / 2 + 1);
		//若为偶数
		else
			return (findKth(A, m, B, n, total / 2)
				 + findKth(A, m, B, n, total / 2 + 1)) / 2;
}

  public static void main(String[]args)
  {
         int[]A={1,2,3};
         int[]B={3,4};
         int m=A.length;
         int n=B.length;
         System.out.println(findMedianSortedArrays(A,m,B,n));

  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值