LeetCode -- Median of Two Sorted Arrays

求解兩個有序數組的的中值,下面的方法的確巧妙:

class Solution {
    int findKmin(int k, int A[], int m, int B[], int n){
        if(m == 0) return B[k -1];
        if(n == 0) return A[k -1];
        if(k == 1) return min(A[0], B[0]);
        if(m > n)  return findKmin(k, B, n, A, m);
        int p = min(m, k/2), q = k - p;
        if(A[p - 1] <= B[q - 1]) {
            return findKmin(k - p, A + p, m - p, B, n);
        } else {
            return findKmin(k - q, A, m, B + q, n - q);
        }
    }
public:
    double findMedianSortedArrays(int A[], int m, int B[], int n) {
        int k = m + n;
        if(k & 1) {
            return findKmin(k/2 + 1, A, m, B, n);
        } else {
            return (findKmin(k/2 , A, m, B, n) + findKmin(k/2 + 1, A, m, B, n))/2.0;
        }
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章