python解决从有序数组中寻找中位数

如果给定两个长度分别是m和n的有序数组array1和array2,需要对这两个有序数组找出其中的中位数,需要保证时间复杂度是O(long(min(m,n)),空间复杂度是O(1)。如下例子:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

对于该例子的中位数是由(3+5)/2得到的。

添加图片注释,不超过 140 字(可选)

对于此给定的数组的两个数组合并长度是奇数,所以中位数是中间位置的4。

对于该问题的解决思路,要寻找两个有序数组的中位数,假设两个数组的长度分别是m和n,第一张工方法是最简单直接的,也就是另外开辟一块m+n大小的空间,将这两个数组合二为一然后重新进行排序,根据合并之后的数组取中位数就十分简单了,但是该方法简单,时间复杂度是最高的,实现的代码如下:

def findMedian(self,nums,nums2):nums3 = nums2+numsnums3.sort()return (nums3[len(nums3)//2]+nums3[len(nums3)-1]//2)/2

但是该方法是不符合问题的限制条件的,对于问题所要求的时间复杂度是对数形式,只有不断地进行二分才有可能出现对数时间复杂度的情况,所以这里考虑采用二分法,再对二分之后的数组进行分治处理。

这里两个有序数组,分别找到两个数组array1和array2的中位数,分别是median1和median2,若果median1小于median2,则median1左侧的所有元素均小于它,这些元素不可能是中位数,可以截去头部到median2之前的所有元素,长度为p2,而median2右侧的所有元素均大于它,越接近尾部元素最大,也不可能是中位数,截去尾部长度为p2的部分,然后对这两个数组被截去后的剩余部分执行同样的操作,当其中较短数组长度为2的时候,较长数组长度如果大于4,则可以再截取其中间长度为3或者4的部分,这时候两个数组剩余部分长度是常数级别的,可以直接排序取中位数。python实现的代码如下:

class Solution:def findmedian(self, array1, array2):len1=len(array1)len2=len(array2)if len1>len2:return self.findmedian(array2,array1)if len1<=2:if len2>4:p1=math.ceil(len2/2)-2array2=array2[p1:-p1]nums=array1+array2nums.sort()return self.getmediannum(nums)p2=math.ceil(len1/2)-1if self.getmediannum(array1)<self.getmediannum(array2):return self.findmedian(array1[p2:],array2[:-p2])else:return self.findmedian(array1[:-p2],array2[p2:])  
#定义一个取数组中位数的函数       def getmediannum(self,nums):return (nums[len(nums)//2]+nums[(len(nums)-1)//2])/2

此方法可以满足时间复杂度和空间复杂度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】混淆Dart 代码

什么是代码混淆&#xff1f; 代码混淆是一种将应用程序二进制文件转换为功能上等价&#xff0c;但人类难于阅读和理解的行为。在编译 Dart 代码时&#xff0c;混淆会隐藏函数和类的名称&#xff0c;并用其他符号替代每个符号&#xff0c;从而使攻击者难以进行逆向工程。 Flut…

ChatGPT和文心一言哪个更好用?

目录 一、ChatGPT和文心一言大模型的对比分析 1.1 二者训练的数据情况分析 1.2 训练大模型数据规模和参数对比 1.3 二者3.5版本大模型对比总结 二、ChatGPT和文心一言功能对比分析 2.1 二者产品提供的功能情况分析 2.2 测试一下各种功能的特性 2.2.1 文本创作能力 2.2…

电脑提示“No Boot Device”怎么办?

在Windows 11/10/8/7启动时遇到错误如“No Boot Device Found”和“未找到引导设备硬盘3F0”时&#xff0c;会导致电脑无法正常开机。那么&#xff0c;No Boot Device错误该怎么修复呢&#xff1f;下面我们就来了解一下。 修复 1. 检查启动顺序并将BIOS的设置重置为默认值 为…

非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (II, Python 简单实例)

Title: 非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (II, Python 简单实例) 姊妹博文 非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (I - 原理与算法) 0.前言 本篇博文作为对前述 “非线性最小二乘问题的数值方法 —— 狗腿法…

【mars3d】内置的右键测量菜单单击关闭按钮无法关闭测量结果说明

1.【mars3d】内置的右键测量菜单单击关闭按钮无法关闭测量结果说明 2.内置的右击地图查看此处坐标&#xff0c;出现的弹框按钮同样无法关闭的解决方案。 解决说明&#xff1a; 1.这个问题和mars3d没有关系&#xff0c;是and那边的问题&#xff0c;需要尝试固定下vue版本3.3.0或…

测试 yolov8 分割模型 边缘检测

发现 cfg/default.yaml 参数 mask_ratio 等于4 直接训练如下边缘分割标签,推理时mask 稀疏&#xff0c;训练时分数偏低,mask_ratio 改为1训练时打印的mask 的 P指标一直为0,将imgsz原图size 训练分数也不高 标注用的是labelme多边形 阅读源码发现可能是因为mask缩放导致 且出现…

springboot配置项动态刷新

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…

IPv4 开始收费!新的 IT 灾难?

对于想要继续使用公共IPv4地址的用户而言&#xff0c;他们主要靠回收和未使用地址段的释放才能用上IPv4&#xff0c;其中这些地址要么来自倒闭的组织&#xff0c;要么来自于那些已经迁移到IPv6时不再需要的地址。 不难想象&#xff0c;获取日益稀缺的IPv4中间过程变得复杂&…

接口测试之webservice

什么是Webservice Web service是一个平台独立的&#xff0c;低耦合的&#xff0c;自包含的、基于可编程的web的应用程序&#xff0c;可使用开放的XML&#xff08;标准通用标记语言下的一个子集&#xff09;标准来描述、发布、发现、协调和配置这些应用程序&#xff0c;用于开发…

STL之map【有序哈希表】使用方法

这里写目录标题 map【有序哈希表】使用方法1.头文件:2.创建map:3.添加键值对:4.查找键值对&#xff1a;5.遍历键-值对&#xff1a;5.综合示例&#xff1a;班级学生 map【有序哈希表】使用方法 话不多说&#xff0c;接着讲map用法&#xff1a; map&#xff1a;映射&#xff0c…

spyder 对 lambda 函数的调试

如何进入lambda匿名函数进行调试&#xff1a; import pandas as pddef func(a, b):return a bseries pd.Series([1,2,3,4]) a series.apply(lambda x: func(x, 2)) print(a) 在调用匿名函数的地方打上断点&#xff0c;也就是这一行&#xff1a; a series.apply(lambda x…

总结Symbol、Set、WeakSet、Map、WeakMap

前言 这几个es6新增的数据结构和变量类型&#xff0c;不经常用&#xff0c;好容易忘记啊。在此记录一下&#xff0c;方便复习。 Symbol Symbol是es6新增的基本数据类型&#xff0c;用于生成独一无二的值。 基本使用 1、创建两个描述相同的值&#xff0c;也不会相等。 let s1 …

R303 指纹识别模块功能实现流程

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前&#xff0c;首先要接收到传输数据包的指令包&#xff0c;做好传输准备后发送成功应答包&#xff0c;最后才开始传输数据包。数据包主要包括&#xff1a;包头、设备地址、包标识、包长…

基于jQuery与Spring MVC实现用户密码异步修改的实战演示

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;创建表单1、表单界面2、表单代码3、脚本代码 &#xff08;二&#xff09;后端控制器&#xff08;三&#xff09;测试代码&#xff0c;查看效果1、弹出更改密码表单2、演示更改密码操作 三、实战总结 一、实战概述 …

【MySQL】最左匹配原则

最左匹配原则 0x1 简单说下什么是最左匹配原则 顾名思义&#xff1a;最左优先&#xff0c;以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like&#xff09;就会停止匹配。 例如&#xff1a;b 2 如果建立(a&#xff0c;b&#xff09;顺序…

苏州渭塘镇应用无人机“智慧执法”

苏州渭塘镇应用无人机“智慧执法” 在今年以来&#xff0c;渭塘镇综合行政执法局采用了“空中地面”的立体监督模式&#xff0c;以实现对“互联网执法”工作的深入推进。在这一模式下&#xff0c;无人机巡查作为技术手段得到广泛应用&#xff0c;而安全生产监管信息系统和综合…

自然语言处理--双向匹配算法

自然语言处理作业1--双向匹配算法 一、概述 双向匹配算法是一种用于自然语言处理的算法&#xff0c;用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。 在双向匹配算法中&#xff0c;首先将两个文本分别进行处理&#xff0c;然后…

企业使用CRM系统有哪些好处?使用CRM应该注意什么?

近年来&#xff0c;企业竞争日趋激烈&#xff0c;为推动企业业绩增长&#xff0c;赢得市场的一席之地&#xff0c;CRM成为企业争相布局的管理工具。那么CRM是什么&#xff0c;到底有什么魔力能让企业管理者着迷&#xff0c;本文我们将为大家进行深入剖析。 什么是CRM&#xff…

龙芯3A6000_通过xrdp远程访问统信UOS

原文链接&#xff1a;龙芯3A6000|通过xrdp远程访问统信UOS hello&#xff0c;大家好&#xff01;今天我带给大家的是一篇实用性极强的技术文章——通过xrdp远程访问装载在龙芯3A6000上的统信UOS操作系统。这意味着&#xff0c;无论您使用的是Windows、MACOS还是Linux操作系统&a…

[视频处理]关于视频处理的多画面样式

在开发视频系统时&#xff0c;经常会遇到多画面的需求&#xff0c;这里收集一些多画面的素材&#xff0c;共大家参考。 图片来源于网络&#xff0c;仅供参考。 后续补充文章 【图像处理】使用FPGA实现视频多画面的方案 多画面样式