Leetcode: Median of Two Sorted Arrays

用找第k个最小元素的方法求:

public class Solution {
    public double findMedianSortedArrays(int A[], int B[]) {
        int l = A.length + B.length;
        if (l % 2 == 0) {
            return (find(A, 0, A.length, B, 0, B.length, l / 2) + find(A, 0, A.length, B, 0, B.length, l / 2 - 1)) / 2.0;
        } else {
            return find(A, 0, A.length, B, 0, B.length, l / 2);
        }
    }

        // k = 0 means the first element
    public int find(int A[], int as, int ae, int B[], int bs, int be, int k) {
        if (as >= ae)
            return B[bs + k];
        if (bs >= be)
            return A[as + k];

        int am = (as + ae) / 2;
        int bm = (bs + be) / 2;

                //number of half elements including the middle elements
        int h = am - as + bm - bs + 2;
        if (A[am] < B[bm]) {
            if (h > k + 1)
                return find(A, as, ae, B, bs, bm, k);
            else
                return find(A, am + 1, ae, B, bs, be, k - (am - as + 1));
        } else {
            if (h > k + 1)
                return find(A, as, am, B, bs, be, k);
            else
                return find(A, as, ae, B, bm + 1, be, k - (bm - bs + 1));
        }
    }
}