here 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)).
作为一个算法新人,用最笨的方法写了个解决办法,居然过了,不得不佩服自己的毅力了.思路就是归并一下数组,新数组长度为M+N/2就够了.代码如下:`
(不推荐大家看我就不解释了~,下面再参考别人代码写下)
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int num[nums1Size+nums2Size];
int i , j ;
double tar;
int k , sum ,mark =0;
int over = 0;
sum =nums1Size+nums2Size;
if(sum%2!=0)
{
k = sum/2;
mark = 1;
}
else
k =sum/2;
i = j = 0;
int n ;
if(nums1Size ==0)
{ if(mark==1)
{tar = nums2[k];
return(tar);
}
else{
tar=nums2[k]+nums2[k-1];
return(tar/2);
}
}
if(nums2Size==0)
{ if(mark==1)
{tar = nums1[k];
return(tar);
}
else{
tar=nums1[k]+nums1[k-1];
return(tar/2);
}
}
for( n = 0 ; n<=k; n++)
{
if(nums1[i]>nums2[j])
{// printf("num =nums2 :%d\n",nums2[j]);
num[n] =nums2[j];
if(j <nums2Size)
j++;
else{
over=2;
break;}
}
else
{// printf("num = nums1:%d\n",nums1[i]);
num[n] =nums1[i];
if( i <nums1Size)
i++;
else
{ over=1;
break;
}
}
}
// printf("nums1 i = %d , nums2 j =%d , n = %d , k =%d ,mark =%d ,over = %d\n",i,j,n,k,mark,over);
// printf("num[0]=%d %d %d",num[0],num[1],num[2]);
if( n>k)
{
if(mark ==1)
{tar = num[k];
return(tar);
}
else
{
tar=num[k]+num[k-1];
return(tar/2);
}
}
if( over == 1)
{
for( ; n<=k ; n++)
num[n] =nums2[j++];
if(mark==1)
tar=num[k];
else
tar =(double) (num[k]+num[k-1])/2 ;
return(tar);
}
for( ; n<=k ; n++)
num[n] =nums1[i++];
if(mark==1)
tar=num[k];
else
tar = (double)(num[k]+num[k-1])/2;
return(tar);
}