思路
1.排除特殊情況(空數(shù)組或單一數(shù)組)
2.把兩個(gè)數(shù)組合成新數(shù)組漏隐,新數(shù)組是有序的
代碼
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
//簡(jiǎn)單情況
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個(gè)數(shù)組計(jì)數(shù),j第2個(gè)數(shù)組計(jì)數(shù)罪郊,k總計(jì)數(shù)
int i = 0;
int j = 0;
int k = 0;
//有序生成新數(shù)組
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++;
}
//取中間數(shù)
if ((nums1Size + nums2Size) % 2 == 0)
{
return (*(mergedArray + (nums1Size + nums2Size) / 2) + *(mergedArray + (nums1Size + nums2Size) / 2 - 1)) / 2.0;
}
else
{
return *(mergedArray + (nums1Size + nums2Size) / 2);
}
}