题目
自解:用了大家都能想到的方法,就是直接合并两个数组,排序,再找中位数。。。可以看出没啥长进。。。继续加油吧!
#include<stdio.h>
#include<stdlib.h>
int cmp(const void*a,const void*b)
{
int c=*(int*)a;
int d=*(int*)b;
return c-d;
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int n[2001]={0};
int i=0,j=0;
for(i=0;i<nums1Size;i++)
{
n[i]=nums1[i];
}
for(i,j=0;j<nums2Size;j++,i++)
{
n[i]=nums2[j];
}
int len=nums1Size+nums2Size;
qsort(n,len,sizeof(n[0]),cmp);
for(i=0;i<len;i++)
{
printf("%d ",n[i]);
}
printf("\n");
double ans=0;
j=len/2;
if(len%2==0)
{
ans=((double)n[j]+(double)n[j-1])/2;
}
else{
ans=(double)n[j];
}
return ans;
}
int main()
{
int n1,n2;
int num1[1001]={0},num2[1001]={0};
scanf("%d%d",&n1,&n2);
int i=0;
for(i=0;i<n1;i++)
{
scanf("%d",&num1[i]);
}
for(i=0;i<n2;i++)
{
scanf("%d",&num2[i]);
}
double ans=findMedianSortedArrays(num1, n1, num2, n2);
printf("%lf",ans);
}
需要注意的是结果要输出double型,如果想小数部分完整输出的话,参与运算的数也要强制类型转换为doble型,否则会按照整除只保留整数部分输出。时间和空间复杂度为O(m+n)。