题目:
分析:
学习题解的一种寻找两个有序数组第k小的数字,思路很好理解。
不多说,也挺好理解的,重复这个过程即可。
算是一遍写出,代码能力确实有了提高:
class Solution {
public:
double f(int c1,int c2,vector<int> n1,vector<int> n2,int k)
{
if(c1==n1.size())
{
return n2[c2+k-1];
}
if(c2==n2.size())
{
return n1[c1+k-1];
}
if(k==1) return min(n1[c1],n2[c2]);
int size1=n1.size();
int cc1=min(c1+k/2-1,size1-1);
int size2=n2.size();
int cc2=min(c2+k/2-1,size2-1);
if(n1[cc1]>n2[cc2])
{
return f(c1,cc2+1,n1,n2,k-(cc2-c2)-1);
}
return f(cc1+1,c2,n1,n2,k-(cc1-c1)-1);
}
double findMedianSortedArrays(vector<int>& n1, vector<int>& n2) {
if((n1.size()+n2.size())%2==1)
{
return f(0,0,n1,n2,(n1.size()+n2.size()+1)/2);
}
return (f(0,0,n1,n2,(n1.size()+n2.size()+1)/2)+f(0,0,n1,n2,(n1.size()+n2.size()+1)/2+1))/2;
}
};