
给定两个大小为 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
Java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
class { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length; int[] nums = new int[len1 + len2]; int k = 0; for (int i = 0, j = 0; i < len1 || j < len2;) { if (i < len1 && j >= len2) { nums[k] = nums1[i]; i++; k++; continue; } else if (i >= len1 && j < len2) { nums[k] = nums2[j]; j++; k++; continue; } int num1 = nums1[i]; int num2 = nums2[j]; if (num1 == num2) { nums[k] = num1; nums[k + 1] = num1; j++; i++; k++; } else if (num1 > num2) { nums[k] = num2; j++; } else { nums[k] = num1; i++; } k++; } if (k % 2 == 0) { return (float)(nums[k / 2 - 1] + nums[k / 2]) / 2; } else { return nums[(k - 1) / 2]; } } }
|
近期评论