力扣算法题——寻找两个有序数组的中位数练习

本文介绍了一种计算两个有序数组中位数的方法,通过合并并排序数组,然后根据数组长度的奇偶性计算中位数。示例展示了如何处理不同情况下的中位数计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0


示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
-----------------------------------------------------------分割线---------------------------------------------------------------

看到这道题,首先想到的是中位数的计算公式,当数组长度是偶数时,将数组按大小排列,取中间两个数组的平均数;当数组长度是奇数时,中位数是按大小排列后数组最中间的数值。

了解完计算方法之后,这道题就有了大致的思路:

1、合并两个数组

2、对新数组进行排序

3、根据公式计算中位数

开始写的时候,数组排序算法自己随便写了个冒泡排序,但运行的后发现代码效率比较低下,后来想起来列表里自带有一个sort()方法可以实现排序,所以后面改成这个方式,执行速度提高了不少,代码如下:

 public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
         double _result = 0.0d;
            int _max = Math.Max(nums1.Length, nums2.Length);
            List<int> _numList = new List<int>(nums1.Concat(nums2));//合并数组
                                                                    //排序
            _numList.Sort();
            //计算中位数
            if (_numList.Count % 2 == 0)
            {
                int _middle = _numList.Count / 2;
                _result = Math.Round(((double)(_numList[_middle - 1] + _numList[_middle]) / 2),1);
            }
            else
            {
                int _middle = (_numList.Count+1) / 2;
                _result = Math.Round((double)_numList[_middle-1],1);
            }


            return _result;
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值