码迷,mamicode.com
首页 > 编程语言 > 详细

寻找两个有序数组的中位数

时间:2019-11-24 21:07:19      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:tor   media   code   while   中位数   turn   ==   bsp   array   

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0
示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int len1=nums1.size();
        int len2=nums2.size();
        if(len1>len2)
            return findMedianSortedArrays(nums2,nums1);
        
        int low=0,heigh=len1*2;
        int lMax1=0,rMin1=0,lMax2=0,rMin2=0;
        while(low<=heigh)
        {
            int c1=(low+heigh)>>1;
            int c2=len1+len2-c1;
            lMax1=(c1==0)?INT_MIN:nums1[(c1-1)/2];
            rMin1=(c1==2*len1)?INT_MAX:nums1[c1/2];
            lMax2=(c2==0)?INT_MIN:nums2[(c2-1)/2];
            rMin2=(c2==2*len2)?INT_MAX:nums2[c2/2];
            
            if(lMax1>rMin2)
                heigh=c1-1;
            else if(lMax2>rMin1)
                low=c1+1;
            else
                break;
        }
        return (max(lMax1,lMax2)+min(rMin1,rMin2))/2.0;
    }
};

 

寻找两个有序数组的中位数

标签:tor   media   code   while   中位数   turn   ==   bsp   array   

原文地址:https://www.cnblogs.com/tianzeng/p/11924246.html

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