【数组 &双指针】Leecode-4. 寻找两个正序数组的中位数

举报
子都爱学习 发表于 2023/10/11 09:02:17 2023/10/11
【摘要】 【题目】给定两个大小分别为 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...

【题目】

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

【题解】

    题解1:

  • 思路

         将两个数组合并并排序,取中位数,快但不符合复杂度要求

  • 复杂度

         时间复杂度:O(1),空间复杂度:O(1)

  • 代码
class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
      nums1.extend(nums2).sort()
      n = len(nums1)
      return  (nums1[int(n/2)]+nums1[int(n/2)-1])/2 if n%2==0 else nums1[int(n/2)]

    题解2:

  • 思路:

        双指针,需要先进行排序

  • 复杂度

         时间复杂度:,空间复杂度:O(n)

  • 代码
class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
      m = len(nums1)
      n = len(nums2)
      mid = (m+n)/2
      pre1 = 0
      pre2 = 0
      ret = []
      while len(ret) < mid+1:
          if pre1>m-1:
              ret.append(nums2[pre2])
          elif pre2>n-1:
              ret.append(nums1[pre1])
          elif nums1[pre1] < nums2[pre2]:
              ret.append(nums1[pre1])
              pre1 += 1
          else:
              ret.append(nums2[pre2])
              pre2 +=1
      if (m+n)%2 == 0:
          return (ret[-1]+ret[-2])/2
      else:
          return ret[-2]



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。