zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    【服务器】【Windows】【3】开放服务器端口
    【服务器】【Windows】【2】把jar包做成服务,在Service中管理
    FZU 1753
    poj 1017
    poj 1666
    poj 1132
    ZOJ 2562 More Divisors
    POJ 2992 Divisors
    poj 2773 happy 2006
    poj 2407 Relatives
  • 原文地址:https://www.cnblogs.com/clover-xuqi/p/7154789.html
Copyright © 2011-2022 走看看