题目
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
分析
1. A,B有序。
2. 时间复杂度限制,联想二分查找。
提示
偶数n个数字的中位数为(A[(n-1)/2] + A[(n-1)/2+1])/2, 奇数m个数字的中位数为A[(n-1)/2]。
方案
1. 此题Discuss板块中有Leetcoder提出,使用Quick Sort,插入排序也可以Accept,二者复杂度分别为O((m+n)log(m+n))、O(m+n),都大于O(log(m+n))。
2. 变形的二分查找,时间复杂度O(log(m+n))。
总结
使用插入排序占用288ms。
CODE
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n) {
vector<int> C;
int i, j;
for (i = 0, j = 0; i < m && j < n; ) {
if(A[i] < B[j]) {
C.push_back(A[i]);
i++;
} else {
C.push_back(B[j]);
j++;
}
}
for(; i < m; i++) {
C.push_back(A[i]);
}
for(; j < n; j++) {
C.push_back(B[j]);
}
int vecSize = m + n;
if (vecSize&1 == 1) {
return C[(vecSize-1)/2];
} else {
return (C[(vecSize-1)/2] + C[(vecSize-1)/2+1])/2.0;
}
}
};