中英题面

  给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。

  There are two sorted arrays nums1 and nums2 of size m and n respectively.

  请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

  Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

  示例 1:

    nums1 = [1, 3]nums2 = [2]中位数是 2.0

  Example 1:

    nums1 = [1, 3]nums2 = [2]The median is 2.0

 示例 2:

    nums1 = [1, 2]nums2 = [3, 4]中位数是 (2 + 3)/2 = 2.5

  Example 2:

    nums1 = [1, 2]nums2 = [3, 4]The median is (2 + 3)/2 = 2.5

算法

  将原题转化为在两个有序数列中查找第k小的元素。

  对于长度为m和n的两个有序数列a和b,考虑0 < i < m和0 < j < n且i + j + 2 == k。

  若a[i] < b[j],则a[0..i]与b[j..(n – 1)]中比无所要查找的元素,将其删去后更新k值递归处理。

  时间复杂度:

    O(log(M + N))

  空间复杂度:

    O(log(M + N))

 
代码
 1 class Solution:
 2     def findMedianSortedArrays(self, nums1, nums2):
 3         """
 4         :type nums1: List[int]
 5         :type nums2: List[int]
 6         :rtype: float
 7         """
 8         m = len(nums1)
 9         n = len(nums2)
10         s = m + n + 1
11         return (self.findKth(nums1, nums2, s // 2) + self.findKth(nums1, nums2, s - s // 2)) / 2
12
13     def findKth(self, nums1, nums2, k):
14         m = len(nums1)
15         n = len(nums2)
16         if (m < n):
17             return self.findKth(nums2, nums1, k)
18         if (not n):
19             return nums1[k - 1]
20         if (k == 1):
21             return min(nums1[0], nums2[0])
22         mid1 = max(k * m // (m + n) - 1, 0)
23         mid2 = k - mid1 - 2
24         if (nums1[mid1] < nums2[mid2]):
25             return self.findKth(nums1[mid1 + 1 :], nums2[: mid2 + 1], k - mid1 - 1)
26         if (nums1[mid1] > nums2[mid2]):
27             return self.findKth(nums1[: mid1 + 1], nums2[mid2 + 1 :], k - mid2 - 1)
28         return nums1[mid1]

转载于:https://www.cnblogs.com/Efve/p/9062352.html

两个排序数组的中位数相关推荐

  1. LeetCode 4 两个排序数组的中位数

    有两个大小为 m 和 n 的排序数组 nums1 和 nums2 . 请找出两个排序数组的中位数并且总的运行时间复杂度为 O(log (m+n)) . 示例 1: nums1 = [1, 3] num ...

  2. 两个排序数组的中位数(4.Median of Two Sorted Arrays)

    题目: 有两个排序的数组nums1和nums2分别为m和n大小. 找到两个排序数组的中位数.整体运行时间复杂度应为O(log(m + n)). 示例1: nums1 = [1,3] nums2 = [ ...

  3. Leetcode4---求两个排序数组的中位数

    题目:给定两个排序数组,求两个排序数组的中位数,要求时间复杂度为O(log(m+n)) 举例: Example 1: nums1 = [1, 3] nums2 = [2]The median is 2 ...

  4. leetcode题库:4.两个排序数组的中位数

    题目: /**   *leetcode题库:4. 求两个排序数组的中位数  *  *  给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 .  *  请找出这两个有序数组的中位数. ...

  5. 算法-两个排序数组的中位数

    题目 两个排序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个有序数组的中位数.要求算法的时间复杂度为 O(log (m+n)) . 示例 1:num ...

  6. python 找到两个排序数组的中位数_4. 寻找两个有序数组的中位数(Python)

    题目 (难)给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假设 nums1 和 nu ...

  7. python 找到两个排序数组的中位数_Python查找两个有序列表中位数的方法【基于归并算法】...

    本文实例讲述了Python查找两个有序列表中位数的方法.,具体如下: 今天做到的一个机试题目,很简单,这里简单记录一下: 我用的是归并的思想,当然还可以用递归的方法,下面是具体实现: #!usr/bi ...

  8. 题目:两个排序数组的中位数(C++)

    纪念一下,这个是我第一次提交的程序就超过了百分之百的提交记录 程序如下: static const auto io_speed_up = []() {std::ios::sync_with_stdio ...

  9. LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays

    1.题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...

最新文章

  1. java-- properties总结
  2. jQuery动态增加表格一行和删除一行
  3. 注意力机制学习(一)——通道注意力与pytorch案例
  4. 西门子Step7的AT指令示例
  5. [代码审计]云优cms V 1.1.2前台多处sql注入,任意文件删除修复绕过至getshell
  6. wifi密码破解软件,谨慎使用!
  7. LTE学习-信道均衡(ZF)
  8. C语言99乘法口诀函数,99乘法口诀妙用C语言输出
  9. html制作网站 知乎,做短视频运营看那些网站(推荐这些短视频素材网站)
  10. @ds实现多数据源切换及解决事务失效问题
  11. php 过滤英文标点符号 过滤中文标点符号
  12. 小白电脑选购与组装之配置篇
  13. 危化品速查APP--Android Project
  14. 为什么文件进行压缩后总是自带密码?
  15. 基于BP神经网络的车牌识别系统的设计
  16. 按首字母升序输出国家名称
  17. openlayers之地图测距侧面
  18. 解决win11下Eclipse安装后双击无法打开
  19. zlibirary官网入口全新获取方式,zlibirary最新地址检测
  20. 在备份数据库过程中出现错误, 未能打开数据库‘msdb’, ‘msdb ‘ 数据库处于回避紧急模式!

热门文章

  1. 嵌入式学习路线怎么学,如何学习嵌入式系统
  2. .net MVC4.0项目发布到阿里云虚拟主机中遇到的问题。
  3. gvim 编辑器初学
  4. Eclipse添加Spket插件实现ExtJs智能提示
  5. SharePoint 数据库管理-PowerShell
  6. NavReady的使用
  7. mplayer1.3.0交叉编译
  8. 第二章 个体软件过程
  9. LVS、Nginx 及 HAProxy 工作原理
  10. linux交换分区的文件格式为,LINUX的交换分区或交换文件SWAP的查看与维护