通常,找出数组中位数有多种方法~~,下面介绍几种常见的办法,演示语言使用c++

1. 合并多个数组,并sort后遍历到中位,输出值

合并采用遍历两个数组的方式,如果其中一个遍历结束,把剩下一个的后半部分都粘贴过来。
排序方法使用stl中的quicksort,sort()
假设两个数组a[m], b[n]
则合并时间复杂度为O(m+n),排序因为采用快排,所以为O(nlogn),遍历时为(m+n)/2
空间由于申请了额外数组,故为O(m+n)
似乎由于输入就是有序的,合并时可以生成新的有序数组,直接遍历到中位数就好。
其实有个更简单的方法,因为只要求返回中位数
所以就在原地排序,数到mid的时候return就行
不过懒得了
又不是赛棍
干这些事情,能跑就行了
真的到了time limited or memory limited的situation了再说吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <algorithm>
using namespace std;

class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2){
int i=0; j=0;
vector<int> nums3;
double midium;
while(i < nums1.size() && j < nums2.size()){
if(nums1[i] < nums2[j]){
nums3.push_back(nums1[i]);
i++;
} else {
nums3.push_back(nums2[j]);
j++;
}
}
if(i < nums1.size()){
while(i < nums1.size()){
nums3.push_back(nums1[i]);
i++;
}
} else {
while(j < nums2.size()){
nums3.push_back(nums2[j]);
j++;
}
}
int sum = nums1.size() + nums2.size();
if (sum % 2 == 1){
int mid = sum / 2;
return nums3[mid];
} else {
int mid = sum / 2;
return (double(nums3[mid - 1]) + nums3[mid]) / 2;
}
}
};

Thanks for wetorx and devseed for their helps
http://blog.wetor.cn
More info: devseed