【力扣】4. 寻找两个正序数组的中位数

4. 寻找两个正序数组的中位数

题目描述

给定两个大小分别为 m n 的正序(从小到大)数组 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

解题方法

  • C 归并法
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2,
                              int nums2Size) {
    int nums[nums1Size + nums2Size]; // 定义一个临时数组,用来存储合并后的数据
    int cnt = 0;      // 定义 cnt 用来做临时数组的指针
    int i = 0, j = 0; // 定义 nums1、nums2 的数组指针
    double result = 0.0;

    // 按顺序将数存放进临时数组内
    while (i < nums1Size || j < nums2Size) {
        if (i == nums1Size) {
            nums[cnt++] = nums2[j++]; // nums1 处理完,添加 nums2 数据
        } else if (j == nums2Size) {
            nums[cnt++] = nums1[i++]; // nums2 处理完,添加 nums1 数据
        } else if (nums1[i] < nums2[j]) {
            nums[cnt++] = nums1[i]; // 按由小到大顺序数据
            i++;
        } else {
            nums[cnt++] = nums2[j];
            j++;
        }
    }

    if (cnt == 1) {
        result = nums[cnt - 1]; // 只有一个数,中位数
    } else {
        if (cnt % 2 == 0) {
            // 偶数个数,中位数为中间两个数的平均值
            result = (nums[cnt / 2] + nums[cnt / 2 - 1]) / 2.0;
        } else {
            // 奇数个数,中位数即为中间那个数
            result = nums[cnt / 2];
        }
    }

    return result;
}

相关推荐

  1. 4寻找序数位数

    2024-04-03 11:50:02       36 阅读
  2. 4. 寻找序数位数

    2024-04-03 11:50:02       39 阅读
  3. 4. 寻找序数位数

    2024-04-03 11:50:02       33 阅读
  4. LeetCode-4. 寻找序数位数

    2024-04-03 11:50:02       52 阅读
  5. leetCode算法—4.寻找序数位数

    2024-04-03 11:50:02       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 11:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 11:50:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 11:50:02       82 阅读
  4. Python语言-面向对象

    2024-04-03 11:50:02       91 阅读

热门阅读

  1. C语言求解最大公约数(欧几里得算法的应用)

    2024-04-03 11:50:02       34 阅读
  2. vue 父组件怎么获取子组件里面的data数据

    2024-04-03 11:50:02       39 阅读
  3. 语言模型的原理、实战与评估

    2024-04-03 11:50:02       35 阅读
  4. 详解Qt中使用线程

    2024-04-03 11:50:02       37 阅读
  5. 搜索引擎-02-分词与全文索引

    2024-04-03 11:50:02       29 阅读
  6. Python | PyCharm 键盘快捷键

    2024-04-03 11:50:02       32 阅读
  7. jvm高级面试题-2024

    2024-04-03 11:50:02       46 阅读
  8. Mini-React

    2024-04-03 11:50:02       46 阅读
  9. 数据库嵌套事务的实现

    2024-04-03 11:50:02       34 阅读
  10. 设计模式(15):迭代器模式

    2024-04-03 11:50:02       33 阅读
  11. 建造者模式:构建复杂对象的优雅之道

    2024-04-03 11:50:02       37 阅读
  12. 堆积排序算法C代码

    2024-04-03 11:50:02       42 阅读