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

Posted 氵冫丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寻找两个有序数组的中位数相关的知识,希望对你有一定的参考价值。

1.题目

2. 线性遍历

m + n 是偶数的时候,是中间的两个数的平均值
m + n 是奇数的时候,是中间的一个数
由于是有序的,可以线性排序,再找出中位数,其实排序不是必须的,只需要线性查找
找到升序是第K 位置的数就好了

class Solution 
public:
    double findMedianSortedArrays(vector<int>& num1, vector<int>& num2) 
        int m = num1.size();
        int n = num2.size();
        int mid_index = (m + n) / 2 ;
        if ( (m+n)%2 == 0) 
            return (findK(num1,num2, mid_index) + findK(num1,num2, mid_index-1) ) /2.0;
         else 
            return findK(num1,num2, mid_index) * 1.0;
        
         
    
    
    int findK(vector<int>& num1, vector<int>& num2, int k) 
        int i = 0, j = 0;
        int m = num1.size();
        int n = num2.size();
        int cur = 0;
        int res = 0;
        while( cur <= k ) 
            if (i<m && j < n) 
                if (num1[i] < num2[j]) 
                    res = num1[i];
                    ++i;
                 else 
                    res = num2[j];
                    ++j;
                
             else if (i < m) 
                res = num1[i];
                ++i;
             else 
                res = num2[j];
                ++j;
            
            ++cur;
        
        return res;
    
;

findK 是不是可以只使用一次?
时间复杂度 O(N)

3. 二分查找

题目要求时间复杂度是 O(log(m+n)),这个意思就是通过二分的方式查找;

以上是关于寻找两个有序数组的中位数的主要内容,如果未能解决你的问题,请参考以下文章

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

[LeetCode] 寻找两个有序数组的中位数

[LeetCode] 4. 寻找两个有序数组的中位数

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

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

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