Problem Statement
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. Constraints: nums1.length == m nums2.length == n 0 <= m <= 1000 0 <= n <= 1000 1 <= m + n <= 2000 -106 <= nums1[i], nums2[i] <= 106
Solution In Java
The problem of finding the median of two sorted arrays can be solved efficiently by applying a binary search algorithm. Here’s the Java solution:
public class MedianOfTwoSortedArrays {
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int totalLength = nums1.length + nums2.length;
if (totalLength % 2 == 0) {
// If the total length is even, find the two middle elements
int mid1 = findKthElement(nums1, nums2, totalLength / 2);
int mid2 = findKthElement(nums1, nums2, totalLength / 2 + 1);
return (mid1 + mid2) / 2.0;
} else {
// If the total length is odd, return the middle element
return findKthElement(nums1, nums2, totalLength / 2 + 1);
}
}
private static int findKthElement(int[] nums1, int[] nums2, int k) {
int index1 = 0, index2 = 0;
while (true) {
// If one array is exhausted, return the kth element from the other array
if (index1 == nums1.length) {
return nums2[index2 + k - 1];
}
if (index2 == nums2.length) {
return nums1[index1 + k - 1];
}
// Compare the current elements in both arrays and move the index accordingly
if (nums1[index1] < nums2[index2]) {
index1++;
} else {
index2++;
}
// Decrement k after comparing elements
k--;
}
}
public static void main(String[] args) {
// Example 1
int[] nums1 = {1, 3};
int[] nums2 = {2};
System.out.println(findMedianSortedArrays(nums1, nums2));
// Example 2
int[] nums3 = {1, 2};
int[] nums4 = {3, 4};
System.out.println(findMedianSortedArrays(nums3, nums4));
}
}
This Java code defines a findMedianSortedArrays method that takes two sorted arrays (nums1 and nums2) as input and returns the median of the combined sorted array. The findKthElement method is a helper function used to find the kth element in the merged array using a binary search-like approach. The main method demonstrates the usage with the provided examples.
Python Solution
def findMedianSortedArrays(nums1, nums2):
total_length = len(nums1) + len(nums2)
if total_length % 2 == 0:
# If the total length is even, find the two middle elements
mid1 = find_kth_element(nums1, nums2, total_length // 2)
mid2 = find_kth_element(nums1, nums2, total_length // 2 + 1)
return (mid1 + mid2) / 2.0
else:
# If the total length is odd, return the middle element
return find_kth_element(nums1, nums2, total_length // 2 + 1)
def find_kth_element(nums1, nums2, k):
index1, index2 = 0, 0
while True:
# If one array is exhausted, return the kth element from the other array
if index1 == len(nums1):
return nums2[index2 + k - 1]
if index2 == len(nums2):
return nums1[index1 + k - 1]
# Compare the current elements in both arrays and move the index accordingly
if nums1[index1] < nums2[index2]:
index1 += 1
else:
index2 += 1
# Decrement k after comparing elements
k -= 1
# Example 1
nums1 = [1, 3]
nums2 = [2]
print(findMedianSortedArrays(nums1, nums2))
# Example 2
nums3 = [1, 2]
nums4 = [3, 4]
print(findMedianSortedArrays(nums3, nums4))
In this Python version, the logic is the same as the Java solution. The findMedianSortedArrays function takes two sorted arrays (nums1 and nums2) as input and returns the median of the combined sorted array. The find_kth_element function is a helper function used to find the kth element in the merged array using a binary search-like approach. The examples demonstrate the usage of the function with the provided test cases.
