给定两个大小为 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。
二分法:
public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
if (nums1==null)
{
if (nums2.Length % 2==0)
{
return (nums2[nums2.Length / 2] + nums2[nums2.Length / 2 - 1]) / 2.000;
}
else
{
return nums2[nums2.Length / 2];
}
}
if (nums2 == null)
{
if (nums1.Length % 2 == 0)
{
return (nums1[nums1.Length / 2] + nums1[nums1.Length / 2 - 1]) / 2.000;
}
else
{
return nums1[nums1.Length / 2];
}
}
int allLength= nums2.Length + nums1.Length;
List<int> li = new List<int>();
int left = 0;
int right = 0;
for (int i = 0; i < allLength; i++)
{
if (left>nums1.Length-1)
{
li.Add(nums2[right]);
right++;
continue;
}
if (right > nums2.Length-1)
{
li.Add(nums1[left]);
left++;
continue;
}
if (nums1[left]<=nums2[right])
{
li.Add(nums1[left]);
left++;
}
else
{
li.Add(nums2[right]);
right++;
}
}
if (li.Count % 2 == 0)
{
return (li[li.Count / 2] + li[li.Count / 2 - 1]) / 2.000;
}
else
{
return li[li.Count / 2];
}
}