两个有序数组的中位数—leetcode4

给定两个大小为 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 n = nums1.size();
        int m = nums2.size();
        if(n>m)
            return findMedianSortedArrays(nums2,nums1);
        int L1,R1,L2,R2,lo=0,hi=n*2;
        while(lo<=hi)
        {
            int c1 = (lo+hi)/2;
            int c2 = n+m-c1;
            L1 = (c1==0)?INT_MIN:nums1[(c1-1)/2];
            R1 = (c1==2*n)?INT_MAX:nums1[c1/2];
            L2 = (c2==0)?INT_MIN:nums2[(c2-1)/2];
            R2 = (c2==2*m)?INT_MAX:nums2[c2/2];

            if(L1>R2)
                hi = hi - 1;
            else if(L2>R1) 
                lo = lo + 1;
            else
                break;
        }
        return (max(L1,L2)+min(R1,R2))/2.0;
    }
};

 

发布了61 篇原创文章 · 获赞 11 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览