题目
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
代码
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
minValue = -1
maxValue = 999999999999999999999999
len1 = len(nums1)
len2 = len(nums2)
size = len1 + len2
if len1 > len2:
len1, len2, nums1, nums2 = len2, len1, nums2, nums1
cutL = 0
cutR = len1
cut1 = len1 // 2
cut2 = size // 2 - cut1
while cut1 <= len1:
L1 = minValue if cut1 == 0 else nums1[cut1 - 1]
R1 = maxValue if cut1 == len1 else nums1[cut1]
L2 = minValue if cut2 == 0 else nums2[cut2 - 1]
R2 = maxValue if cut2 == len2 else nums2[cut2]
if L1 > R2:
cutR = cut1 - 1
elif L2 > R1:
cutL = cut1 + 1
else:
if size % 2 == 0:
l = max(L1, L2)
r = min(R1, R2)
return (l + r) / 2
else:
return min(R1, R2)
cut1 = (cutR - cutL) // 2 + cutL
cut2 = size // 2 - cut1
解法参考:此博客
然鹅,对于示例2的数据,本地运行正确2.5,但是leetcode上结果一直是2,不明白为什么。。。。。
问题已解决。(2+3)/2.0
或者 (float)(2+3)/2
即可。