美文网首页
4.两个排序数组的中位数

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

作者: 无名的殇 | 来源:发表于2018-05-13 21:57 被阅读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);
    }
}

相关文章

  • 两个排序数组的中位数

    这是一道经典的数组类型的题目,利用的二分查找(Binary Search )。 4.两个排序数组的中位数(Leet...

  • #4 Median of Two Sorted Arrays

    在两个有序数组中寻找中位数,思想时归并排序的思想,将两个数组归并排序到一个数组中,提前算出中位数的个数减少循环次数

  • 两个排序数组的中位数

    两个排序数组的中位数 给定两个大小为 m 和 n 的有序数组nums1和nums2。 请找出这两个有序数组的中位数...

  • leetcode-0004

    题目: 4. 寻找两个有序数组的中位数 关键词:排序 折半查找 思路: 查找第k个数,每次查找二个数组的第k/2位...

  • LintCode 80 [Median]

    原题 给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组...

  • Lintcode-中位数

    问题描述: 给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序...

  • 中位数

    给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N...

  • OJ lintcode 中位数

    给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N...

  • lintcode 两个排序数组的中位数

    两个排序的数组A和B分别含有m和n个数,找到两个排序数组的中位数,要求时间复杂度应为O(log (m+n))。给出...

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

    哈哈哈哈刚发现leetcode还有中文版的,叫领扣,不用翻译了 There are two sorted arra...

网友评论

      本文标题:4.两个排序数组的中位数

      本文链接:https://www.haomeiwen.com/subject/xjrrdftx.html