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