4. Median of Two Sorted Arrays
- Total Accepted: 122172
- Total Submissions: 604583
- Difficulty: Hard
- Contributors: Admin
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5题意很明确,找中间数,如果为奇数就是中间的那个数,为偶数就是中间两个数的平均数,如果没有要求时间复杂度,最直接的做法是两个数组合并再次排序,但是本题是要求时间复杂度为O(log(m+n))的,网上的做法普遍分两种归并和二分,下面的代码用的归并。
代码如下:
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
int total = len1 + len2;
if(total % 2==0){
return (findKth(nums1,nums2,total/2)+findKth(nums1,nums2,total/2+1))/2.0;
} else {
return findKth(nums1,nums2,total/2+1);
}
}
private int findKth(int[] nums1, int[] nums2, int k){
int p = 0, q = 0;
for(int i = 0; i < k - 1; i++){
if(p>=nums1.length && q<nums2.length){
q++;
} else if(q>=nums2.length && p<nums1.length){
p++;
} else if(nums1[p]>nums2[q]){
q++;
} else {
p++;
}
}
if(p>=nums1.length) {
return nums2[q];
} else if(q>=nums2.length) {
return nums1[p];
} else {
return Math.min(nums1[p],nums2[q]);
}
}
}