寻找两个正序数组的中位数(Python,LeetCode)

目录

题目描述

输入/输出描述

解决方案

代码

代码走读

传送门


题目描述

给定两个大小为m和n的正序(从小到大)数组nums1和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度 O(log(m+n)) 。你可以假设nums1和nums2不会同时为空。

 

输入/输出描述

给定数组1 [1, 2]
给定数组2 [3, 4]
输出 2.5
解释 因为两个数组合并后按从小到大排序后的结果是[1, 2, 3, 4],则其中位数为 (2 + 3)/ 2 = 2.5

 

解决方案

将两个数组合并后按照从小到大的序列排序,按照中位数的计算规则求出中位数的值。

中位数计算规则:

1、如果数列长度是奇数,则中位数对应的下标为 (length / 2) + 1

2、如果数列长度是偶数,则中位数对应下标为 length / 2的数字和 (length / 2) + 1 两数的平均值。

 

代码

class Solution:
    def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
        nums1.extend(nums2)
        nums1.sort()

        length = len(nums1)
        if length % 2 == 0:
            return (nums1[int(length/2 - 1)] + nums1[int(length/2)]) / 2.0
        else:
            return nums1[int((length+1)/2 - 1)]

 

代码走读

# LeetCode定义解决方案类
class Solution:
    def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
        # 将两个列表合并后按照从大到小的顺序排序
        nums1.extend(nums2)
        nums1.sort()

        # 判断合并后列表的长度是奇数还是偶数,然后根据中位数计算规则计算出中位数
        length = len(nums1)
        if length % 2 == 0:
            return (nums1[int(length/2 - 1)] + nums1[int(length/2)]) / 2.0
        else:
            return nums1[int((length+1)/2 - 1)]


# 自测用例
if __name__ == '__main__':
    s = Solution()
    result = s.findMedianSortedArrays([1, 2], [3])
    print(result)

 

传送门

LeetCode试题链接

list.extend()方法

list.sort()方法

len()函数

int()函数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章