Leetcode每日必刷题库第4题,如何寻找两个正序数组的中位数?

举报
格图洛书 发表于 2021/11/18 23:31:50 2021/11/18
【摘要】 题目: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例: 示例 1: ...

题目:

给定两个大小为 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. class Solution(object):
  2. def findMedianSortedArrays(self, nums1, nums2):
  3. a, b = sorted((nums1, nums2), key=len)
  4. m, n = len(a), len(b)
  5. after = (m + n - 1) / 2
  6. lo, hi = 0, m
  7. while lo < hi:
  8. i = (lo + hi) / 2
  9. if after-i-1 < 0 or a[i] >= b[after-i-1]:
  10. hi = i
  11. else:
  12. lo = i + 1
  13. i = lo
  14. nextfew = sorted(a[i:i+2] + b[after-i:after-i+2])
  15. return (nextfew[0] + nextfew[1 - (m+n)%2]) / 2.0

 

文章来源: wenyusuran.blog.csdn.net,作者:文宇肃然,版权归原作者所有,如需转载,请联系作者。

原文链接:wenyusuran.blog.csdn.net/article/details/107463151

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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