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

【LeetCode】4. 寻找两个有序数组的中位数

时间:2018-12-15 23:56:12      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:长度   view   查找   会同   return   color   arrays   src   open   

给定两个大小为 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


分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 log 级别。回顾下中位数,对于一个有序数组,如果数组长度是奇数,那么中位数就是中间那个值,如果长度是偶数,就是中间两个数的平均数。

二分查找:两个指针扫一下,每次选小的,找到第mid个,就是中位数。

技术分享图片
class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int length1 = nums1.size();
        int length2 = nums2.size();
        int mid = (length1+length2)/2;
        int s = 0;
        int l = 0;
        int r = 0;
        int now = 0;
        int pre = 0;
        while(s<=mid && l<length1 && r<length2){
            pre = now;
            if(nums1[l]<nums2[r]){
                now = nums1[l];
                l++;
            }else{
                now = nums2[r];
                r++;
            }
            s++;
        }
        while(s<=mid && l<length1){
            pre = now;
            now = nums1[l];
            l++;
            s++;
        }
         while(s<=mid && r<length2){
            pre = now;
            now = nums2[r];
            r++;
            s++;
        }
        if((length1+length2)!=mid*2){
            return now;
        }else{
            return 1.0*(now+pre)/2;
        }
    }
};
View Code

 

【LeetCode】4. 寻找两个有序数组的中位数

标签:长度   view   查找   会同   return   color   arrays   src   open   

原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/10125374.html

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