4.两个排序数组的中位数

2018-05-13  本文已影响0人  无名的殇

题目


思路
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);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读