[leetcode刷题系列]Median of Two Sorted Arrays

看代码,猜算法,复杂度是logm + logn ~


class Solution {
public:
    /**
     * th is 0-based
     */
    int find(int *a, int n, int *b, int m, int th){
        if(n == 0)
            return b[th];
        if(m == 0)
            return a[th];
        int mida = n - 1 >> 1;
        int midb = m - 1 >> 1;
        if(a[mida] < b[midb])
            return find(b, m, a, n, th);
        // a[mida] >= b[midb]
        if(mida + 1 + midb + 1 <= th + 1)
            return find(a, n, b + (midb + 1), m - (midb + 1), (th + 1) - (midb + 1) - 1);
        else{
            return find(a, mida, b, m, th);
        }
    }
    double findMedianSortedArrays(int A[], int m, int B[], int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(m + n & 1){
            int mid = m + n >> 1;
            return find(A, m, B, n, mid);
        }else{
            int r = m + n >> 1;
            int l = r - 1;
            return (find(A, m, B, n, l) + find(A, m, B, n, r)) / 2.0;
        }
    }
};


猜你喜欢

转载自blog.csdn.net/sigh1988/article/details/12192299