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),但是空间开销较大。

posted @ 2019-02-27 11:11  雨飞  阅读(150)  评论(0编辑  收藏  举报