给定两个大小分别为 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
            

作者 admin

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注