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
This problem is quite easy, just use two pointers, if the element of pointer one smaller than pointer2's, we add pointer one, else we add pointer2, append the current element to the result list. The median elements will always end at half of the sum of nums1's length add nums2's length. For the odd length just return the last element in the result list, for the even length, we should add the last two numbers and divided by 2.
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
len1 = len(nums1)
len2 = len(nums2)
pointer1 = pointer2 = 0
count = 0
target = 0
odd = True
target = (len1 + len2) / 2
if (len1 + len2) % 2 == 0:
odd = False
res = self.helper(nums1, nums2, pointer1, pointer2, target)
if odd:
return res[-1]
else:
return (float(res[-1]) + float(res[-2]))/2.0
def helper(self, nums1, nums2, pointer1, pointer2, target):
len1 = len(nums1)
len2 = len(nums2)
res = []
while pointer1 < len1 and pointer2 < len2:
if nums1[pointer1] < nums2[pointer2]:
res.append(nums1[pointer1])
pointer1 += 1
else:
res.append(nums2[pointer2])
pointer2 += 1
if len(res) == target + 1:
return res
while pointer1 < len1:
res.append(nums1[pointer1])
pointer1 += 1
if len(res) == target + 1:
return res
while pointer2 < len2:
res.append(nums2[pointer2])
pointer2 += 1
if len(res) == target + 1:
return res