leetcode 4. 两个排序数组的中位数
题意
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
你可以假设 nums1 和 nums2 不同时为空。
解题思路
使用归并排序把 nums1 和 nums2 两个有序数组结合起来,得到一个有序数组 nums3 。nums3 的中位数即为所求。
代码
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int p1 = 0;
int p2 = 0;
int p3 = 0;
int[] nums3 = new int[nums1.length + nums2.length];
while (p1 != nums1.length || p2 != nums2.length)
{
if (p1 == nums1.length)
{
nums3[p3++] = nums2[p2++];
continue;
}
if (p2 == nums2.length)
{
nums3[p3++] = nums1[p1++];
continue;
}
if (nums1[p1] < nums2[p2])
{
nums3[p3++] = nums1[p1++];
}
else
{
nums3[p3++] = nums2[p2++];
}
}
int mid = nums3.length / 2;
if (nums3.length % 2 == 0)
{
double result = ((double)nums3[mid] + (double)nums3[mid - 1]) / 2;
return result;
}
else
{
double result = nums3[mid];
return result;
}
}
}