寻找两个有序数组的中位数
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)),这个意思就是通过二分的方式查找;
以上是关于寻找两个有序数组的中位数的主要内容,如果未能解决你的问题,请参考以下文章