Chinaunix首页 | 论坛 | 博客
  • 博客访问: 255943
  • 博文数量: 170
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1709
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-06 18:01
文章分类

全部博文(170)

文章存档

2016年(11)

2015年(130)

2014年(29)

分类: Java

2015-03-29 12:04:55

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

1.注意:M+N是偶数时要求平均值。
2.并且用起始位置和个数来表示数组。
3.求第K个值,我们不断在两个数组平分k来进行计算,去掉小的那个数组。
4.k和m是我们的初始要关注的 并且要对数组进行个数排序。

public class MedianofTwoSortedArrays {
//没考虑数组都是0的情况
public static void main(String[] args){
int A[]=new int[]{

};
int B[]=new int[]{
62
};
findMedianSortedArrays(A, B);
}
public static double  findMedianSortedArrays(int A[], int B[]) {
        int m=A.length;
        int n=B.length;
        int total=m+n;
        if((total&1)==1)
        return findKth(A,0,m,B,0,n,total/2+1);
        else {
return (findKth(A,0,m,B,0,n,total/2)+findKth(A,0,m,B,0,n,total/2+1))/2.0;
}
    }


private static int findKth(int[] a, int i, int m, int[] b, int j, int n, int k) {
// TODO 自动生成的方法存根
if(m>n)
return findKth(b, j, n,a, i, m, k);
if(m==0)
return b[j+k-1];
if(k==1)
return min(a[i], b[j]);
int pa=min(k/2, m),pb=k-pa;
if(a[i+pa-1] return findKth(a, i+pa, m-pa, b, j, n, k-pa);
else
{
if(a[i+pa-1]>b[j+pb-1])
return findKth(a, i, m, b, j+pb, n-pb, k-pb);
else {
return a[i+pa-1];
}
}
}
private static int min(int a, int b){  
        return a > b ? b : a;  
    }  
}

阅读(570) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~