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
本文介绍了一种寻找两个有序数组中位数的方法,通过使用双指针技巧,确保了整体运行时间复杂度为O(log(m+n))。文中提供了一个具体的Python实现示例。
298

被折叠的 条评论
为什么被折叠?



