当前位置: 首页 > article >正文

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

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

题目描述

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

算法的时间复杂度应该为 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;
    
}


http://www.kler.cn/a/145086.html

相关文章:

  • (二)QT——按钮小程序
  • 运算符重载(输出运算符<<) c++
  • [EAI-026] DeepSeek-VL2 技术报告解读
  • 【linux】Linux 常见目录特性、权限和功能
  • 04树 + 堆 + 优先队列 + 图(D1_树(D1_基本介绍))
  • 搜索引擎快速收录:关键词布局的艺术
  • Failed to initialize NVML: Driver/library version mismatch
  • Nginx高级
  • BART 并行成像重建:ESPIRiT 重建(两组ESPIRiT maps)
  • DistilBERT模型训练实战
  • 易错知识点(数学一)
  • cJSON的使用——下载、打包与解析
  • [HCIE] IPSec-VPN (手工模式)
  • 「Verilog学习笔记」数据累加输出
  • 队列实现栈VS栈实现队列
  • MATLAB中字符和字符串操作
  • 【anaconda】numpy.dot 向量点乘小技巧
  • 【机器学习 | 聚类】关于聚类最全评价方法大全,确定不收藏?
  • 【LeetCode:828. 统计子串中的唯一字符 | 贡献法 乘法原理】
  • 十分钟让你搞懂JVM中的GC垃圾回收机制(分代回收)
  • MySQL- 创建可以远程访问的root账户
  • GIT版本控制和常用命令使用介绍
  • Centos开机启动Java程序
  • [架构相关]基础架构设计原则
  • openEuler Linux 部署 FineBi
  • Spark-06:共享变量