给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
直接根据算法的时间复杂度为O(log (m+n)),想到只有快排,归并,堆排三种符合log这种形式。所以直接用python自带的list.sort()方法可以直接进行快排。
寻找中位数就简单了,如果是奇数就取中间一个的,如果是偶数就取中间两个的然后返回平均值就好了。
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
new_nums = (nums1 + nums2)
new_nums.sort()
length = len(new_nums)
if length == 0:
return []
if length == 1:
length_nums1 = len(nums1)
length_nums2 = len(nums2)
if length_nums1 == 1:
return float(nums1[0])
else:
return float(nums2[0])
if length >1:
# 先进行奇数偶数判断
# 奇数直接返回中位数
# 偶数就分两块,取第一块的尾巴和第二块的头,然后平均求和
if length % 2 == 0:
index_1 = int(length / 2)
index_2 = index_1 -1
value_1 = new_nums[index_1]
value_2 = new_nums[index_2]
result = (value_1 + value_2)/2
return result
else:
index = length // 2
result = new_nums[index]
return result