4.Median of Two Sorted Arrays¶
Tags: Hard
Array
Link: https://leetcode.com/problems/median-of-two-sorted-arrays/
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)).
You may assume nums1 and nums2 cannot be both empty.
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
Answer:
class Solution {
public:
double findKth(vector<int>& A, vector<int>& B, int A_st, int B_st, int k) {
// 边界情况,任一数列为空
if (A_st >= A.size()) {
return B[B_st + k - 1];
}
if (B_st >= B.size()) {
return A[A_st + k - 1];
}
// k等于1时表示取最小值,直接返回min
if (k == 1) return min(A[A_st], B[B_st]);
int A_key = A_st + k / 2 - 1 >= A.size() ? INT_MAX : A[A_st + k / 2 - 1];
int B_key = B_st + k / 2 - 1 >= B.size() ? INT_MAX : B[B_st + k / 2 - 1];
if (A_key < B_key){
return findKth(A, B, A_st + k / 2, B_st, k - k / 2);
} else {
return findKth(A, B, A_st, B_st + k / 2, k - k / 2);
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int sum = nums1.size() + nums2.size();
double ret;
if (sum & 1) {
ret = findKth(nums1, nums2, 0, 0, sum / 2 + 1);
} else {
ret = ((findKth(nums1, nums2, 0, 0, sum / 2)) +
findKth(nums1, nums2, 0, 0, sum / 2 + 1)) / 2.0;
}
return ret;
}
};