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)).
//Median of Two Sorted Arrays
#include<cstdio>
class Solution {
public:
double findMedianSortedArrays(int A[], int m, int B[], int n) {
//确定中位序号
int mid1=-1,mid2=-1;
if((m+n)%2==0)
{
mid1 = (m+n)/2;
mid2 = (m+n)/2+1;
}
else
{
mid1 = mid2 = (m+n)/2+1;
}
int i = 0,j = 0;
int cnt = 0;//计数器
int pre,pro;//暂存值
while(true)
{
int ma,mb;
//取当前A最小值
if(i < m)
ma = A[i];
else
ma = 0x7FFFFFFF;
//取当前B最小值
if(j < n)
mb = B[j];
else
mb = 0x7FFFFFFF;
//比较
int tmp;
if(ma<mb)
{
tmp =ma;
i++;
}
else
{
tmp = mb;
j++;
}
cnt ++;
if(cnt==mid1)
{
pre = tmp;
}
if(cnt==mid2)
{
pro = tmp;
return (double)(pre+pro)/2;
}
}
}
};
int
main(void)
{
int arr[]={1};
int brr[]={2};
Solution sn;
printf("%f\n",sn.findMedianSortedArrays(arr,1,brr,1));
return 0;
}