【Leetcode】4. 寻找两个正序数组的中位数(Median of Two Sorted Arrays)

No4. 寻找两个正序数组的中位数

题目

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。

进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

示例 1

  • 输入:nums1 = [1,3], nums2 = [2]
  • 输出:2.00000
  • 解释:合并数组 = [1,2,3] ,中位数 2

示例 2

  • 输入:nums1 = [1,2], nums2 = [3,4]
  • 输出:2.50000
  • 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

示例 3

  • 输入:nums1 = [0,0], nums2 = [0,0]
  • 输出:0.00000

示例 4

  • 输入:nums1 = [], nums2 = [1]
  • 输出:1.00000

示例 5

  • 输入:nums1 = [2], nums2 = []
  • 输出:2.00000

提示

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

解题代码(Python3)

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        s = nums1 + nums2
        length = len(s)
        s.sort()
        if length%2 == 0:
            index = length//2
            return (s[index]+s[index-1])/2 
        else:
            index = (length-1)//2
            return s[index] 

思路:

  1. 利用python的sort方法将合并后的列表进行排序
  2. 若为偶数,则中位数是处于length//2length//2-1位置上数的平均值;若为偶数,则中位数是处于(length-1)//2位置的值

复杂度分析:

  • 时间复杂度O(nlogn)
  • 空间复杂度O(1)

运行结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Xiao_Spring/article/details/113666580
今日推荐