zoukankan      html  css  js  c++  java
  • Median of Two Sorted Arrays

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

    转换题意为找到第k个数,此题k=(m+n)/2

    如果时间复杂度o(k)可以接受的话,可以模拟合并,找到第k个数即可

    此处要求时间复杂度O(log (m+n)).基本可以确定希望我们二分。

    二分一般有两个角度,一个是对结果二分,缩小结果范围,让其逼近结果;令一个是对容器二分,缩小可选范围。

    这题可以用第一个角度,找第k个数,那么我们每次排除k/2个数,时间复杂度就是O(logk).

    代码:

    int min(int a,int b)
    {
        return a<b?a:b;
    }
    
    int findKth(int a[],int m,int b[],int n,int k)
        {
            if(m>n){//假设m总是小于等于n
                return findKth(b,n,a,m,k);
            }
            if(m==0){
                return b[k-1];
            }
            if(n==0){
                return a[k-1];
            }
            if(k==1){
                return min(a[0],b[0]);
            }
            int pa = min(k/2,m);
            int pb = k-pa;
            if(a[pa-1] < b[pb-1]){
                return findKth(a+pa,m-pa,b,n,k-pa);
            }else if(a[pa-1] > b[pb-1]){
                return findKth(a,m,b+pb,n-pb,k-pb);
            }else{
                return a[pa-1];
            }
        }
    
    double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
        if((nums1Size+nums2Size)&0x1){
            return findKth(nums1,nums1Size,nums2,nums2Size,(nums1Size+nums2Size)/2+1);
        }else{
            int res1 = findKth(nums1,nums1Size,nums2,nums2Size,(nums1Size+nums2Size)/2);
            int res2 = findKth(nums1,nums1Size,nums2,nums2Size,(nums1Size+nums2Size)/2+1);
            return (res1+res2)/2.0;
        }
    }

    参考:http://blog.csdn.net/yutianzuijin/article/details/11499917/

  • 相关阅读:
    Chrome即将封杀Google Earth、Google Talk等插件
    诗情画意
    奇联妙对
    理解大型分布式网站你必须知道这些概念 (转)
    RESTful API
    什么是微服务?
    Spring Cloud与Spring Boot的关系
    springboot定时任务
    SpringBoot工程目录配置
    Spring Boot中配置文件application.properties使用
  • 原文地址:https://www.cnblogs.com/zengzy/p/5013561.html
Copyright © 2011-2022 走看看