方法一:

def median_1(A, B):# 思路一: 先组合成一个有序数列,再取中位数# 时间复杂度O(m+n)len_A = len(A)len_B = len(B)C = []if len_A == len_B == 0:raise ValueErrori = j = 0for k in range(0, len_A + len_B):if j == len_B or (i < len_A and A[i] <= B[j]):C.append(A[i])i += 1else:C.append(B[j])j += 1half = (len_A + len_B) // 2if (len_A + len_B) % 2 == 0:return (C[half - 1] + C[half]) / 2else:return C[half]

方法二:

def median_2(A, B):# 思路二: 没有必要完全产生出第三个列表,我们在一开始就可以知道需要取的索引,且可以用变量记录而不新建列表# 时间复杂度: O((m+n)/2) => O(m+n)len_A = len(A)len_B = len(B)if len_A == len_B == 0:raise ValueErrorhalf = (len_A + len_B) // 2 + 1pre = cur = i = j = 0for k in range(0, half):if j == len_B or (i < len_A and A[i] <= B[j]):pre = curcur = A[i]i += 1else:pre = curcur = B[j]j += 1if (len_A + len_B) % 2 == 0:return (pre + cur) / 2else:return cur

方法三:

def median_3(A, B, k=None):# 思路三: 求中位数的问题可以看作是求第(m+n)/2小的数的问题.如果是偶数个,则是第(m+n)/2小和第(m+n)/2+1小的均值.# 时间复杂度: O(log(m+n))# 更多Python视频、源码、资料加群725638078免费获取m, n = len(A), len(B)if m > n:n, m, A, B = m, n, B, Aif n == 0:raise ValueErrorif k == None:k1 = (m + n + 1) // 2k2 = (m + n + 2) // 2return (median_3(A, B, k1) + median_3(A, B, k2)) / 2if m == 0:return B[k - 1]if k == 1:return A[0] if A[0] <= B[0] else B[0]half = k // 2index_A = min(m - 1, half - 1)index_B = min(n - 1, half - 1)if A[index_A] <= B[index_B]:return median_3(A[index_A + 1:], B, k - index_A - 1)else:return median_3(A, B[index_B + 1:], k - index_B - 1)

方法四:

def median_4(A, B):# 思路四:二分法, i = 0 ~ m, j = (m + n + 1) / 2 - i, 需保证j>=0, 即n>=m# 时间复杂度: O(log(min(m,n)))# 更多Python视频、源码、资料加群725638078免费获取m, n = len(A), len(B)if m > n:m, n, A, B = n, m, B, Aif n == 0:raise ValueErrori_min = 0i_max = mhalf = (m + n + 1) // 2while i_min <= i_max:i = (i_min + i_max) // 2j = half - iif i > 0 and A[i - 1] > B[j]:# i太大了i_max = i - 1elif i < m and A[i] < B[j - 1]:# i太小了i_min = i + 1else:if i == 0:max_of_left = B[half - 1]elif j == 0:max_of_left = A[half - 1]else:max_of_left = max(A[i - 1], B[j - 1])if (m + n) % 2 == 1:return max_of_leftif i == m:min_of_right = B[j]elif j == n:min_of_right = A[i]else:min_of_right = min(A[i], B[j])return (max_of_left + min_of_right) / 2

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web

用四种方法Python求出两个有序数组中的中位数相关推荐

  1. 1. 定义方法,求出指定元素在数组中出现的次数.

    package Day05;import java.util.ArrayList;/*** 3.* c* 1. 定义方法,求出指定元素在数组中出现的次数.* 2. 定义方法,统计数组中出现次数为1的元 ...

  2. 求两个有序数组中的中位数和第k小的元素

    我们首先来看一下这一类题算法的原型: 对应牛客网链接: https://www.nowcoder.com/practice/08588d568e164e0a9958b5d6a3c351f5?tpId= ...

  3. LeetCode4.python实现:寻找两个有序数组中的中位数问题☆☆☆

    目录 问题 解题思路 python具体实现 题外话 问题 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log( ...

  4. 寻找两个有序数组中的中位数

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

  5. 【分步详解】两个有序数组中的中位数和Top K问题

    我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...

  6. 找两个有序数组中的中位数---分治法实验1

    问题描述 设X[ 0 : n - 1]和Y[ 0 : n – 1 ]为两个数组,每个数组中含有n个已排好序的数.找出X和Y的2n个数的中位数. 编程任务 利用分治策略试设计一个O (log n)时间的 ...

  7. Algs4-1.4.12找出两个有序数组的公共元素-方法1

    1.4.12编写一个程序,有序打印给定的两个有序数组(含有N个int值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N成比. 答: import java.util.Arrays; publ ...

  8. LeetCode(Python实现)—寻找两个有序数组的中位数

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

  9. C++leetcode找出两个有序数组的中位数(2)

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 如果不考虑复杂度的话这个题目很简单:将两 ...

最新文章

  1. 匿名函数应用-多线程测试代码
  2. asp 检查黑名单_十九、绕过黑名单检查实现文件上传2
  3. debian linux u盘安装,使用U盘安装Debian系统图文教程
  4. 二级级联菜单---纯js实现
  5. 对话智能新高度:全面解读百度开放域对话模型PLATO
  6. 将一张表的主键(ID)重置为从1开始自增排列
  7. 简单粗暴的移动端页面开发技能
  8. shell 清楚空格_Cygwin系列(五):Shell命令行初体验
  9. 在Power BI Desktop报告中使用图像
  10. [面试] 算法(五)—— 替换字符串中的空格
  11. paip.python错误解决10
  12. 矩阵的转置与求导运算
  13. 团队作业8----第二次项目冲刺(Beta阶段) 第七天
  14. 在终端输入“python”或者”pip“时出现python’不是内部或外部命令,也不是可运行的程序 或批处理文件
  15. ROS2极简总结-坐标变换-TF
  16. DSP6455开发: dsp.lib库使用总结
  17. php类的定义与实例化方法
  18. ArcGIS打开山东天地图WMTS服务
  19. Microbiome:稻种的驯化在生态进化上塑造水稻种子的细菌与真菌群落
  20. 一、IRIG-B 概念

热门文章

  1. Java负数的位运算
  2. Python可视化:Seaborn(二)
  3. FromBottomToTop团队项目总结
  4. 快速搭建LNMP(1 )
  5. 算法导论——贪心算法:哈夫曼编码(霍夫曼编码)
  6. 在CentOS上安装FFMPEG和Gstream-ffmpeg
  7. kail Linux 安装Parallels Tools
  8. asp.net引用用户控件
  9. PS效果教程——冒充手绘效果
  10. 帆软正则表达式定义规则