There are two sorted arrays A and B 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)).
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n)
{
int count=0,i=0,j=0;
int mid1 = 0,mid2=0;
if((m+n)<=2)
{
if(m==0 && n==0)
return 0;
else if((m+n)==1)
{
if(m==0)
return B[0];
else
return A[0];
}
else if((m+n)==2)
{
if(m==0)
return (B[0]+B[1])/2.0;
else if(n==0)
return (A[0]+A[1])/2.0;
else
return (A[0]+B[0])/2.0;
}
}
else if(m==0)
{
if(n%2==0)
return (B[n/2-1]+B[n/2])/2.0;
else
return B[n/2];
}
else
{
for(i=0;i<m;)
{
if(j<n)
{
if(A[i]<=B[j])
{
++count;
if(count==(m+n)/2)
mid1 = A[i];
if(count==((m+n)/2+1))
mid2 = A[i];
++i;
}
}
else
{
++count;
if(count==(m+n)/2)
mid1 = A[i];
if(count==((m+n)/2+1))
mid2 = A[i];
++i;
}
for(;j<n;)
{
if(i<m)
{
if(A[i]>B[j])
{
++count;
if(count==(m+n)/2)
mid1 = B[j];
if(count==((m+n)/2+1))
mid2 = B[j];
++j;
}
else
break;
}
else
{
++count;
if(count==(m+n)/2)
mid1 = B[j];
if(count==((m+n)/2+1))
mid2 = B[j];
++j;
}
}
}
}
if((m+n)%2==0)
return (mid1+mid2)/2.0;
else
return mid2;
}
};
For now,it is not so complicated as I saw it for the first time.Just use a counter and two pointer that points the array respectively,the counter stands for number in the count place and the pointer point the current element . It is worth mentioning that we have to consider the special situation(when the array is empty),and the index is always one less than the number.