4.两个排序数组的中位数

题目:

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

我的思路:

把两个数组按大小连接成一个数组,然后取中位数,主要是复杂度有要求

后来发现有的人的解法:

直接nums1.extend(nums2),然后调用sort,取中位数,发现好像也不超时,吐血!我的特殊情况还调了一会…

def (nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
len1 = len(nums1)
len2 = len(nums2)

if len1 == len2 == 0:
return 0
if len1 == len2 == 1:
return (nums1[0] + nums2[0]) / 2
maxl = []
minl = []
cnt = 0 # 较小数组的游标
if len1 > len2:
maxl = nums1
minl = nums2
else:
maxl = nums2
minl = nums1
for i, v in enumerate(maxl):
if minl and maxl[i] > minl[cnt]: # 小数组不为空且大数组当前位置大于小数组游标位置
maxl.insert(i, minl[cnt])
cnt += 1 # 游标后移
if cnt == len(minl): # 小数组到最后了
break
if cnt < len(minl): # 小数组还有剩余
for i in range(cnt, len(minl)):
maxl.append(minl[i])
# print(maxl)

# 下面就是取中位数
maxlen = int(len(maxl) / 2)
if len(maxl) % 2 == 1:
return maxl[maxlen]
else:
return (maxl[maxlen - 1] + maxl[maxlen]) / 2