题目:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2
答案(Python3):
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
self.nums1 = nums1
self.nums2 = nums2
m = len(nums1)
n = len(nums2)
resultList = [] ###合并数组
if (m+n)%2 == 1: ###奇数
i = 0
j = 0
z = 0
if m == 0:
result = nums2[n//2]
elif n == 0:
result = nums1[m//2]
else:
while((i+j)<((m+n)//2+1)):
if (i < m)& (j < n):
if nums1[i] < nums2[j]:
resultList.append(nums1[i])
i = i+1
else:
resultList.append(nums2[j])
j = j+1
elif (i>=m): ###第一个序列遍历完了
resultList.append(nums2[j])
j = j+1
else:
resultList.append(nums1[i])
i = i+1
z = z+1
result = resultList[z-1]
else: ###偶数
i = 0
j = 0
z = 0
if m == 0:
result = (nums2[n//2] + nums2[n//2-1])/2
elif n == 0:
result = (nums1[m//2] + nums1[m//2-1])/2
else:
while((i+j)<((m+n)//2)+1):
if (i < m)& (j < n):
if nums1[i] < nums2[j]:
resultList.append(nums1[i])
i = i+1
else:
resultList.append(nums2[j])
j = j+1
elif (i>=m): ###第一个序列遍历完了
resultList.append(nums2[j])
j = j+1
else:
resultList.append(nums1[i])
i = i+1
z = z+1
result = (resultList[z-1]+resultList[z-2])/2
return(result)