美文网首页
LeetCode_Python(4)_寻找两个有序数组的中位数

LeetCode_Python(4)_寻找两个有序数组的中位数

作者: 惑也 | 来源:发表于2018-12-31 21:58 被阅读8次

    需求

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

    解决思路

    1. 合并2个列表,并排序(升序);
    2. 如果合并后的列表元素个数为奇数,直接取最中间的元素;
    3. 如果合并后的列表元素个数为偶数,则取最中间的2个元素的均值。

    参考代码

    nums1 = [1, 3]
    nums2 = [2, 4]
    
    
    def get_medians(nums1, nums2):
        item = nums1 + nums2
        item.sort()
        count = len(item)
    
        if count % 2 == 1:
            return item[count // 2]
        else:
            return (item[count // 2] + item[count // 2 - 1]) / 2
    
    print(get_medians(nums1, nums2))
    2.5
    

    相关文章

      网友评论

          本文标题:LeetCode_Python(4)_寻找两个有序数组的中位数

          本文链接:https://www.haomeiwen.com/subject/vlbblqtx.html