有序数组,这样信息量就很大了,由于是log,所以每次至少要减掉和k有比例关系的一部分。
参考资料:http://blog.csdn.net/yutianzuijin/article/details/11499917/
double findKth(vector a,vector b,int k){
//must m>n
int m = a.size();
int n = b.size();
if(m<n)
return findKth(b,a,k);
if(n==0)return a[k-1];
if(k==1)return min(a[0],b[0]);
int na,nb;
nb = min(k/2,n);
na = k-nb;
if(a[na-1]<=b[nb-1]){
for(int i=0;i<na;i++){
//vector<int>::iterator iter = a.begin();
a.erase(a.begin());
}
return findKth(a,b,k-na);
}else{
for(int i=0;i<nb;i++){
//vector<int>::iterator iter = a.begin();
b.erase(b.begin());
}
return findKth(a,b,k-nb);
}
}
class Solution {
public:
double findMedianSortedArrays(vector& nums1, vector& nums2) {
int num1 = nums1.size();
int num2 = nums2.size();
if( (num1+num2)%2==0 ){
return ( (double)findKth(nums1,nums2,(num1+num2)/2) + (double)findKth(nums1,nums2,(num1+num2)/2+1) )/2;
}else{
return ( (double)findKth(nums1,nums2,(num1+num2+1)/2) );
}
}
};