题目:
分析:
学习题解的一种寻找两个有序数组第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;
}
};
转载请注明原文地址: https://lol.8miu.com/read-11517.html