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)),这个意思就是通过二分的方式查找;
465

被折叠的 条评论
为什么被折叠?



