1. 题目
004-Median_of_two_sorted_arrays
2. 算法
http://blog.csdn.net/yutianzuijin/article/details/11499917/
- 要求复杂度O(nlg(n+m))
* 思路
- 将原问题转换为一个寻找第k小数的问题
- 边界条件
3. 代码
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int total=nums1.size()+nums2.size();
if(total &0x1)
return findkth(nums1,nums2,total/2+1);
else{
vector<int>a,b;
a.assign(nums1.begin(),nums1.end());
b.assign(nums2.begin(),nums2.end());
return (findkth(nums1,nums2,total/2)+findkth(nums1,nums2,total/2+1))/2.0;
}
}
double findkth(vector<int>& A,vector<int>& B,int k){
int m=A.size();
int n=B.size();
if(m>n) return findkth(B,A,k);
if(m==0) return B[k-1];
if(k==1) return min(A[0],B[0]);
int pa=min(k/2,m),pb=k-pa;
if(A[pa-1]<B[pb-1]){
A.erase(A.begin(),A.begin()+pa);
return findkth(A,B,k-pa);
}else if(A[pa-1]>B[pb-1]){
B.erase(B.begin(),B.begin()+pb);
return findkth(A,B,k-pb);
}else{
return A[pa-1];
}
}
};