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.
import math
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
iter_1 = 0
end_1 = len(nums1)
iter_2 = 0
end_2 = len(nums2)
first_median = None
second_median = None
median_num_1 = None
median_num_2 = None
counter = 0
total_length = end_1 + end_2
if total_length % 2 == 0:
even = True
median_num_1 = total_length / 2 - 1
median_num_2 = total_length / 2
else:
even = False
median_num_1 = math.floor(total_length/2)
while iter_1 < end_1 or iter_2 < end_2:
if even:
if counter == median_num_1:
if iter_1 < end_1 and nums1[iter_1] < nums2[iter_2]:
first_median = nums1[iter_1]
elif iter_2 < end_2:
first_median = nums2[iter_2]
elif counter == median_num_2:
if iter_1 < end_1 and nums1[iter_1] < nums2[iter_2]:
second_median = nums1[iter_1]
elif iter_2 < end_2:
second_median = nums2[iter_2]
break
elif even is False and counter == median_num_1:
if iter_1 < end_1 and nums1[iter_1] < nums2[iter_2]:
first_median = nums1[iter_1]
elif iter_2 < end_2:
first_median = nums2[iter_2]
break
if iter_1 < end_1:
if iter_2 == end_2 or nums1[iter_1] < nums2[iter_2]:
iter_1 += 1
if iter_2 < end_2:
if iter_1 == end_1 or nums2[iter_2] < nums1[iter_1]:
iter_2 += 1
counter += 1
if even:
return (first_median + second_median) / 2
else:
return first_median
sol = Solution()
print(sol.findMedianSortedArrays([11, 12], [2, 3]))