题目描述:
给定两个大小为 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
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int p1 = 0;
int p2 = 0;
int len1 = nums1.length;
int len2 = nums2.length;
int len = len1 + len2;
int[] array = new int[len];
if(nums1 == null){
return len2 % 2 == 0 ? (double)(nums2[(len2 >>>1) -1] + nums2[(len2 >>>1)]) / 2 : (double)nums2[len2 >>> 1];
}
if(nums2 == null){
return len1 % 2 == 0 ? (double)(nums1[(len1 >>>1) -1] + nums1[(len1 >>>1)]) / 2: (double)nums1[len1 >>> 1];
}
int index = 0;
while(p1 < len1 && p2 < len2){
if(nums1[p1] <= nums2[p2]){
array[index++] = nums1[p1++];
}else{
array[index++] = nums2[p2++];
}
}
while(p1 < len1){
array[index++] = nums1[p1++];
}
while(p2 < len2){
array[index++] = nums2[p2++];
}
return len % 2 == 0 ? (double)(array[(len >>>1) -1] + array[(len >>>1)]) / 2 : (double)array[len >>> 1];
}
}
执行用时 : 13 ms, 在Median of Two Sorted Arrays的Java提交中击败了80.60% 的用户
内存消耗 : 49.3 MB, 在Median of Two Sorted Arrays的Java提交中击败了84.15% 的用户