C语言每日一题(39)寻找两个正序数组的中位数

力扣网 4 寻找两个正序数组的中位数

题目描述

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的 中位数

算法的时间复杂度应该为 O(log (m+n))

示例 1:

复制代码
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:

复制代码
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

提示:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

思路分析

最基本的思路,将两个数组重新排序到一个新的数组里,之后再求这个数组的中位数。

关于中位数的求法:

根据元素个数决定,如果个数为奇数,中间那个就是中位数,如果为偶数,则中间的和前一个元素的平均数就是中位数。

复制代码
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    int j=0;
    int i=0;
    int q=0;
    int k=0;
    int arr[nums1Size+nums2Size];
    while(i<nums1Size||j<nums2Size)
    {
        if(i==nums1Size)
        {
            q=nums2[j++];//将要存放到新数组里的值先放到q里。
        }
        else if(j==nums2Size)
        {
            q=nums1[i++];   
        }
        else if(nums1[i]<nums2[j])
        {
            q=nums1[i++];
        }
        else
        {
            q=nums2[j++];
        }
        arr[k++]=q;
    }
    int a=nums1Size+nums2Size;
    double n=0;
    if(a==1)
    {
        return arr[a-1];
    }
    else
    {
        if(a%2==0)
        {
            int b=a/2;
            n=(arr[b-1]+arr[b])/2.0;//整除2.0转换为double型
        }
        else
        {
            int b=a/2;
            n=arr[b]*1.0;
        }
    }
    return n;
    
}
相关推荐
2501_933670795 分钟前
平台招商运营校招能力模型:数据分析、SQL与增长场景拆解
开发语言
怕浪猫1 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
free-elcmacom1 小时前
C语言指针进阶——指针数组模拟二维数组,以及二级指针到底怎么理解
c语言·visual studio code
菜鸟~noob2331 小时前
【Bonjour】华为Peerium架构深度解析:从冯·诺依曼到百万处理器“一台计算机”,附MATLAB性能仿真【含matlab代码,可直接运行】
开发语言·matlab·华为·peerium
白远山1 小时前
24小时自助健身房系统开发实战:从需求分析到完整指南
java·开发语言·数据库·数据挖掘·需求分析
aichitang20241 小时前
前端小skill
前端·人工智能·算法·ai·前端框架
山下梅子酒2251 小时前
洛谷-入门-B2049
c语言
All for pursuit.2 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
木子算法2 小时前
测出来的值会抖:约束和目标带噪声时,「可行」和「更好」该怎么判
人工智能·算法·目标跟踪
shmily麻瓜小菜鸡3 小时前
TDD(测试驱动开发)详解
开发语言·javascript·typescript·node.js·ecmascript