LeetCode

题目描述:找出两个有序数组合并之后的中位数。复杂度控制在log(N)

如:

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

思路:

先转成logN内求两个数组第K大,二分即可实现。

在求 第(N+2)/2 是多少,以及 (N+1)/2是多少,即可。

AC代码:
int min(int a,int b){
    if(a<b)return a;
    return b;
}

int fk(int* n1,int n,int* m1 ,int m,int k){
    if (n < m){
        return fk(m1,m,n1,n,k);
    }
    if(m==0){
        return n1[k-1];
    }
    if(k==1){
        return min(n1[0],m1[0]);
    }
    int l = min(k/2,n);
    int r = min(k/2,m);
    if(n1[l-1] < m1[r-1]){
        return fk(n1+l,n-l,m1,m,k-l);
    }else{
        return fk(n1,n,m1+r,m-r,k-r);
    }
}

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {

    int l = (nums1Size + nums2Size+2)/2;
    int r = (nums1Size + nums2Size+1)/2;
    return (fk(nums1,nums1Size,nums2,nums2Size,l)+fk(nums1,nums1Size,nums2,nums2Size,r))/2.0;
}

原文地址:https://www.cnblogs.com/clover-xuqi/p/7154789.html