您的位置:首页 > 其它

【leetcode】Median of Two Sorted Arrays

2016-05-04 11:11 387 查看
There are two sorted arrays nums1 and nums2 of
size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

思路:

将求解转换为求第k小元素的问题

代码

double findKthArrays(int* a1,int m,int* a2,int n,int k) {
//m<=n
if(m>n)return findKthArrays(a2,n,a1,m,k);
if(m==0)return a2[k-1];
if(k==1)return min(a1[0],a2[0]);
int pa=min(k/2,m),pb=k-pa;
if(a1[pa-1]<a2[pb-1])return findKthArrays(a1+pa,m-pa,a2,n,k-pa);
else if(a1[pa-1]>a2[pb-1])return findKthArrays(a1,m,a2+pb,n-pb,k-pb);
else return a1[pa-1];
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m=nums1.size();
int n=nums2.size();
int k=m+n;
if(k&1)
{
return findKthArrays(&nums1[0],m,&nums2[0],n,(k+1)/2);
}else
{
return ((double)findKthArrays(&nums1[0],m,&nums2[0],n,k/2)+(double)findKthArrays(&nums1[0],m,&nums2[0],n,k/2+1))/2.0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: