4. Median of Two Sorted Arrays
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).
Example 1:
Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.
Example 2:
Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
Example 3:
Input: nums1 = [0,0], nums2 = [0,0]
Output: 0.00000
Example 4:
Input: nums1 = [], nums2 = [1]
Output: 1.00000
Example 5:
Input: nums1 = [2], nums2 = []
Output: 2.00000
Constraints:
- nums1.length == m
- nums2.length == n
- 0 <= m <= 1000
- 0 <= n <= 1000
- 1 <= m + n <= 2000
- -106 <= nums1[i], nums2[i] <= 106
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length, n = nums2.length;
int l = (m+n+1)/2;
int r = (m+n+2)/2;
return (getKth(nums1,0,nums2,0,l)+getKth(nums1,0,nums2,0,r))/2.0;
}
public double getKth(int[] A, int aStart, int[] B, int bStart, int k){
if(aStart>A.length-1){
return B[bStart+k-1];
}
if(bStart>B.length-1){
return A[aStart+k-1];
}
if(k==1){
return Math.min(A[aStart],B[bStart]);
}
int aMid = Integer.MAX_VALUE, bMid = Integer.MAX_VALUE;
if(aStart+k/2-1<A.length){
aMid = A[aStart+k/2-1];
}
if(bStart+k/2-1<B.length){
bMid = B[bStart+k/2-1];
}
if(aMid<bMid){
return getKth(A, aStart+k/2,B,bStart,k-k/2);
}else{
return getKth(A,aStart,B,bStart+k/2, k-k/2);
}
}
}