思路
1.排除特殊情况(空数组或单一数组)
2.把两个数组合成新数组,新数组是有序的
代码
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
//简单情况
if (nums1Size == 0 && nums2Size == 0)
{
return 0;
}
if (nums1Size == 0)
{
if (nums2Size % 2 == 0)
{
return (*(nums2 + nums2Size / 2) + *(nums2 + nums2Size / 2 -1)) / 2.0;
}
else
{
return *(nums2 + nums2Size / 2);
}
}
if (nums2Size == 0)
{
if (nums1Size % 2 == 0)
{
return (*(nums1 + nums1Size / 2) + *(nums1 + nums1Size / 2 -1)) / 2.0;
}
else
{
return *(nums1 + nums1Size / 2);
}
}
//i第1个数组计数,j第2个数组计数,k总计数
int i = 0;
int j = 0;
int k = 0;
//有序生成新数组
double* mergedArray = (double*)malloc(sizeof(double) * (nums1Size + nums2Size));
while((i <= nums1Size -1) && (j <= nums2Size - 1))
{
if (*(nums1 + i) < *(nums2 + j))
{
*(mergedArray + k) = *(nums1 + i);
i++;
k++;
}
else
{
*(mergedArray + k) = *(nums2 + j) ;
j++;
k++;
}
}
while (i <= nums1Size -1)
{
*(mergedArray + k) = *(nums1 + i) ;
i++;
k++;
}
while (j <= nums2Size -1)
{
*(mergedArray + k) = *(nums2 + j) ;
j++;
k++;
}
//取中间数
if ((nums1Size + nums2Size) % 2 == 0)
{
return (*(mergedArray + (nums1Size + nums2Size) / 2) + *(mergedArray + (nums1Size + nums2Size) / 2 - 1)) / 2.0;
}
else
{
return *(mergedArray + (nums1Size + nums2Size) / 2);
}
}