首页 > 其他 > 详细

Median of Two Sorted Arrays

时间:2015-09-10 11:13:12      阅读:186      评论:0      收藏:0      [点我收藏+]

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)).

思路

如果不要求为log的时间复杂度,则可以用遍历的方式,从两个数组的开始同,合并两个已排序链表的方式,找到k,


解法一:

求中值也就是求倒数第K=(m+n)/2的值,

int findkth(vector<int>::iterator nums1,int m,vector<int>::iterator nums2,int n,int k){

        if(m>n){

            return findkth(nums2,n,nums1,m,k);

        }

        

        if(m==0)

            return *(nums2+k-1);

        if(k==1)

            return min(*nums1,*nums2);

        else{

            int ia=min(m,k/2);

            int ib=k-ia;

            

            if(*(nums1+ia-1)<*(nums2+ib-1)){

                return findkth(nums1+ia,m-ia,nums2,n,k-ia);

            }

            else if(*(nums1+ia-1)>*(nums2+ib-1))

                return findkth(nums1,m,nums2+ib,n-ib,k-ib);

            else

                return *(nums1+ia-1);

        }

    }

    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {

        int m=nums1.size();

        int n=nums2.size();

        

        int total=m+n;

        int k=total/2;

        if(total%2)

            return findkth(nums1.begin(),m,nums2.begin(),n,k+1);

        else

            return (findkth(nums1.begin(),m,nums2.begin(),n,k+1)+findkth(nums1.begin(),m,nums2.begin(),n,k))/2.0;

    }




Median of Two Sorted Arrays

原文:http://searchcoding.blog.51cto.com/1335412/1693322

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!