您的位置:首页 > 职场人生

面试:数组:两数组中的中序数

2016-05-15 16:05 423 查看

题目

两个有序的数组A和B,分别拥有m和n长度,求合并后的第k个数

算法

二分查找O(lgN)

import java.util.*;

class Solution{
private double findkthSortedArrays(int[] A,int astart,int aend,int[] B,int bstart,int bend,int k){

int m=aend-astart,n=bend-bstart;
if(m<n)
return findkthSortedArrays(B,bstart,bend,A,astart,aend,k);
if(n==0)
return A[astart+k-1];
if(n==1)
return Math.min(A[astart],B[bstart]);

int pb=Math.min(k/2,n),pa=k-pb;

if(A[astart+pa-1]>B[bstart+pa-1])
return findkthSortedArrays(A,astart,aend,B,bstart+pb,bend,k-pb);
else if(A[astart+pa-1]<B[bstart+pa-1])
return findkthSortedArrays(A,astart+pa,aend,B,bstart,bend,k-pa);
else
return A[astart+pa-1];

}

public double findMedianSortedArrays(int[] A,int[] B){
int m=A.length,n=B.length;
if((n+m)%2==1)
return findkthSortedArrays(A,0,m,B,0,n,(n+m)/2+1);
else
return (findkthSortedArrays(A,0,m,B,0,n,(n+m)/2+1)+
findkthSortedArrays(A,0,m,B,0,n,(n+m)/2))/2.0;
}

public static void main(String[] args){
Scanner cin=new Scanner(System.in);
Solution s=new Solution();
int[] A={1,2,4};
int[] B={3,5,6};
System.out.println(s.findMedianSortedArrays(A, B));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: