码迷,mamicode.com
首页 > 其他好文 > 详细

logn+m复杂度找两个有序数列的中位数

时间:2017-02-20 19:03:49      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:vector   nbsp   turn   数列   color   blog   code   size   pre   

class Solution {
public:
    double fun(vector<int> nums1,int n,vector<int> nums2,int m,int k)
    {
        if(nums1.size()-n>nums2.size()-m) return fun(nums2,m,nums1,n,k);
        if(n==nums1.size()) return nums2[k-1+m];
        if(k==1) return min(nums1[n],nums2[m]);
        int pa=min(k/2,(int)nums1.size()-n),pb=k-pa;
        if(nums1[pa-1+n]<nums2[pb-1+m]) return fun(nums1,n+pa,nums2,m,k-pa);
        if(nums1[pa-1+n]>nums2[pb-1+m]) return fun(nums1,n,nums2,m+pb,k-pb);
        return nums1[pa-1+n];
    }
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int tot=nums1.size()+nums2.size();
        if(tot&1) return fun(nums1,0,nums2,0,tot/2+1);
        return (fun(nums1,0,nums2,0,tot/2)+fun(nums1,0,nums2,0,tot/2+1))/2;
    }
};

 

logn+m复杂度找两个有序数列的中位数

标签:vector   nbsp   turn   数列   color   blog   code   size   pre   

原文地址:http://www.cnblogs.com/d-e-v-i-l/p/6420730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!