public class Solution
{
public double findMedianSortedArrays(int A[], int B[])
{
if(A==null || A.length==0) return (B[B.length/2] + B[(B.length-1)/2])/2.0;
if(B==null || B.length==0) return (A[A.length/2] + A[(A.length-1)/2])/2.0;
int idx1 = (A.length+B.length)/2 + 1;
int idx2 = (A.length+B.length-1)/2 + 1;
return (getKthNum(A, 0, B, 0, idx1) + getKthNum(A, 0, B, 0, idx2))/2.0;
}
public int getKthNum(int []A, int startA, int[]B, int startB, int k)
{
if(startA >= A.length) return B[startB+k-1];
if(startB >= B.length) return A[startA+k-1];
if(k == 1) return Math.min(A[startA], B[startB]);
int midA = startA+k/2-1<A.length ? A[startA+k/2-1] : Integer.MAX_VALUE;
int midB = startB+k/2-1<B.length ? B[startB+k/2-1] : Integer.MAX_VALUE;
if(midA < midB) return getKthNum(A, startA+k/2, B, startB, k-k/2);
else return getKthNum(A, startA, B, startB+k/2, k-k/2);
}
}
两个有序数组中位数
最新推荐文章于 2021-10-12 00:00:00 发布