Median of Two Sorted Arrays

来源:互联网 发布:hadoop 知乎 编辑:程序博客网 时间:2024/06/05 16:49

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

Example 1:

nums1 = [1, 3]nums2 = [2]The median is 2.0

Example 2:

nums1 = [1, 2]nums2 = [3, 4]The median is (2 + 3)/2 = 2.5
/*有点类似二分的思想*/class Solution {public:    int Find(int nums1[],int len1,int nums2[],int len2,int k)    {        if(len1>len2)return Find(nums2,len2,nums1,len1,k);        if(len1==0)return nums2[k-1];        if(k==1)return min(nums1[0],nums2[0]);        int i=min(len1,k/2),j=min(len2,k/2);        if(nums1[i-1]>nums2[j-1])        {                        return Find(nums1,len1,nums2+j,len2-j,k-j);        }        else        {            return Find(nums1+i,len1-i,nums2,len2,k-i);        }    }    double findMedianSortedArrays(vector<int>&nums1, vector<int>&nums2) {        int len1=nums1.size(),len2=nums2.size();        int k1=(len1+len2+1)>>1;        int k2=(len1+len2+2)>>1;        if(len1==0&&len2==0)return 0;        if(len1==0&&len2!=0)return (nums2[k1-1]+nums2[k2-1])/2.0;        if(len2==0&&len1!=0)return (nums1[k1-1]+nums1[k2-1])/2.0;        int *a=&nums1[0];        int *b=&nums2[0];        return (Find(a,len1,b,len2,k1)+Find(a,len1,b,len2,k2))/2.0;    }};


原创粉丝点击