zoukankan      html  css  js  c++  java
  • LeetCode练习4 找出这两个有序数组的中位数

    给定两个大小为 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
    分析,这个在C#中,可以先合并数组。然后对数组进行sort,然后分析找出中位数。
    代码如下:
     public static double FindMedianSortedArrays(int[] nums1, int[] nums2)
            {
                double result = 0.0;
                if(nums1 == null && nums2 == null)
                {
                    return result;
                }
    
                List<int> numList = new List<int>();
              
                if(nums1 != null)
                {
                    numList.AddRange(nums1.ToList());
                }
    
                if(nums2 != null)
                {
                    numList.AddRange(nums2.ToList());
                }
                numList.Sort();
    
                if(numList.Count == 1)
                {
                    return numList[0];
                }
                else if(numList.Count == 2)
                {
                    return (numList[0] + numList[1]) / 2.0;
                }
    
                int midIndex = numList.Count / 2;//
                int midRem = numList.Count % 2;//余数
                
                if(midRem != 0)
                {
                    result = numList[midIndex];
                }
                else
                {
                    result = (numList[midIndex] + numList[midIndex - 1]) / 2.0;
                }
    
                return result;
                
            }

    以上代码时间复杂度为O(1),但是空间开销较大。

  • 相关阅读:
    struct模块
    socketserver模块
    操作系统的基础知识和进程
    day28
    day27
    内心要强大
    《人生》
    下棋+《人生》
    悲哀+鸡眼
    脑壳疼
  • 原文地址:https://www.cnblogs.com/wangyu19900123/p/10442396.html
Copyright © 2011-2022 走看看