目录
频道首页
算法进修——力扣0004寻找两个正序数组的中位数
收藏
0
Aubyn 最近修改于 2023-11-01 21:44:38

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

难度:困难

题目描述

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n))

示例1

输入:nums1 = [1,3], nums2 = [2] 输出:2.00000

示例2

输入:nums1 = [1,2], nums2 = [3,4] 输入:2.50000

题解

将两个数组合并到一个List表中,通过Sort来对它进行排序,并获得两个数组的长度的和len,如果和为奇数就可以直接返回List中的 $len / 2$ 的值,如果为偶数,就返回List中 $len / 2$ 和 $len / 2 + 1$ 的和的平均值

想法代码

public class Solution
{
    public static void Main(string[] args)
    {
        int[] nums1 = { 1, 2 };
        int[] nums2 = { 3, 4 };
        Console.WriteLine(FindMedianSortedArrays(nums1,nums2));
    }

    public static double FindMedianSortedArrays(int[] nums1, int[] nums2)
    {
        int m = nums1.Length;
        int n = nums2.Length;
        int len = m + n;
        var resultIndex = len / 2;
        List<int> list = new List<int>(nums1);
        list.AddRange(nums2);
        list.Sort();
        if (len % 2 == 0)
        {
            return (list[resultIndex - 1] + list[resultIndex]) / 2.0;
        }
        else
        {
            return list[resultIndex];
        }
    }
}
内容大纲
批注笔记
算法进修——力扣0004寻找两个正序数组的中位数
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板