python使用分治算法找出出现次数最多的数字

对于给定的一个长度为n的数组nums,需要找出起重工出现次数大于n/2向下取整的元素,假设给定的数组中一定存在符合给定要求的数,例如给定如下的例子:

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

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

对于这个问题,可以使用分治算法来将问题规模不断缩小,在执行过程中减少部分计算,这样就可以提高执行效率。

对于分治算法解决思路,如果想要在n个数中寻找出现次数最多的数字,将问题规模缩小可以先找出前n/2部分出现次数最多的数head,再找出后n/2部分出现次数最多的数tail,如果这两者相等,则说明出现次数最多的数字已经找到了,而如果两者不相等,则需要再在n个数字中搜索head和tail分别出现的次数,选择出现次数最大的那个作为最终的结果。

要对于找出前n/2部分出现次数最多的数的过程与上述的过程是一致的,也就是对n/2部分的前半部分和后半部分分别作判断,依次进行递推,直至判断部分的长度为1位置,这样就可以将该数进行返回了。

对于第一个例子的整个分治过程如下:

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

根据每次分治返回的head和tail进行判断最终返回的是1,为出现次数最多的数字。

使用python实现的代码如下:

class Solution:def findnum(self, nums):def func(low,high):if low==high:return nums[low]mid=low+(high-low)//2head=func(low,mid)tail=func(mid+1,high)if head==tail:return tailhead_count=sum(1 for i in range(low,high+1) if nums[i]==head)tail_count=sum(1 for i in range(low,high+1) if nums[i]==tail)return head if head_count>tail_count else tailreturn func(0,len(nums)-1)

对于该问题,可以提供其他的一些解决方式,例如可以使用字典的方式来结局,将nums中的每个数字作为键key,然后将每个数字出现的次数作为值value,然后将nums转换成一个字典dic,这样就可以使用max(dic.keys(),key=dic.get)这个方法来获取字典dic中value的最大值所对应的键key了。对于max(dic.keys(),key)这个方法首先是会遍历字典,然后将返回值作为参数传递给key所对应的函数,再将函数的执行结果传回给key,以此时key的值来作为标准进行判断大小,返回一个最大值即可,python实现的代码如下:

class Solution:def findnum(self, nums):dic={}for i in nums:dic[i]=dic.get(i,0)+1return max(dic.keys(),key=dic.get)

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

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

相关文章

docker使用http_proxy配置代理

钢铁知识库,一个学习python爬虫、数据分析的知识库。人生苦短,快用python。 在内网服务器中,docker经常需要下载拉取镜像,但由于没有网络要么只能手动导入镜像包,又或者通过http_proxy代理到其它服务器下载。 解决方法…

看书标记【R语言数据分析项目精解:理论、方法、实战 9】

看书标记——R语言 Chapter 9 文本挖掘——点评数据展示策略9.1项目背景、目标和方案9.1.1项目背景9.1.2项目目标9.1.3项目方案1.建立评论文本质量量化指标2.建立用户相似度模型3.对用户评论进行情感性分析 9.2项目技术理论简介9.2.1评论文本质量量化指标模型1.主题覆盖量2.评论…

FA-分配行重分配报错【APP-OFA-48313】

FA-重分配行报错 已存在行只能分多次转移调整 Ref1: APP-OFA-48313 You Cannot Create Identical Distribution Lines with Transfer (Doc ID 336894.1) APPLIES TO: Oracle Assets - Version 11.5.10.0 and later Information in this document applies to any…

Ubuntu20 服务器版磁盘扩容

Ubuntu20 服务器版磁盘扩容 Ubuntu20 服务器版磁盘不够用进可以使用fdisk命令对磁盘进行扩容 本案例中是基于vmware虚拟化环境下,ubuntu服务器按默认磁盘大小16G进行安装后,运行一段时间后发面/分区磁盘空间全部用完,导致服务无法正常运行。基…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档:http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深,具体而言,就是观察两个协议实体之间交换的报文序列&…

厨艺学习_

选食用油 https://www.bilibili.com/video/BV1oC4y1u799 葵花籽油:万能 玉米油:有香气 菜籽油:又香气,但芥酸高 对三高不好 对老人不好 花生油:不要清炒蔬菜、不能油炸 大豆油:便宜,高温炒…

长虹智能电视 Q2F系列 ZLS59GiQ2机芯 强制刷机升级方法,及刷机升级数据,维修模式进入方法等

适配机芯:ZLS59GiQ2 适配机型:50Q2F、48Q2E、55Q2E、55Q2F、58Q2F、43Q2F、49Q2F、32Q2F 软件强制升级方法: 1、下载后解压,找到upgrade_ZLS59GiQ2_V1.00XXX.bin 、ZLS59GiQ2_mboot.bin复制到U盘根目录(不要有任何…

C++ //练习 2.31 假设已有上一个练习中所做的那些声明,则下面的哪些语句是合法的?请说明顶层const和底层const在每个例子中有何体现。

C Primer(第5版) 练习 2.31 练习 2.31 假设已有上一个练习中所做的那些声明,则下面的哪些语句是合法的?请说明顶层const和底层const在每个例子中有何体现。 r1 v2; p1 p2; p2 p1; p1 p3; p2 p3;环境:Linux Ubun…

React三大属性

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 知…

只会 Python 不行,不会 Python 万万不行 。。。

当下的环境大家有目共睹,未来一段时间情况如何,想必不少人心里也清楚,技术人走到中年,难免会焦虑,职场上干得不爽,但是跳槽也不容易,加上不少企业裁员,换个满意的工作更是难上加难。…

数学建模--Radar图绘制

1.Radar图简介 最近在数学建模中碰见需要绘制Radar图(雷达图)的情况来具体分析样本的各个特征之间的得分与优劣关系,这样的情况比较符合雷达图的使用场景,一般来说,雷达图适用于展示多个维度的数据,并在一个平面上直观地呈现出不同…

长虹智能电视ZLS58Gi4X机芯刷机升级方法,附整机USB升级固件数据 U3、1U、U1、U3C、6000i系列等适用

适用机芯:ZLS58Gi4X 适用机型: 40U3、65U3、43A1U、49A1U、55A1U、43C1U、50C1U、43U1、49U1、50U1、55U1、58U1、43U1A、49U1A、50U1A、55U1A、58U1A、43U3C、49U3C、50U3C、55U3C、43Z80U、50Z80U、55Z80U、LED49Z80U、LED55Z80U、UD43D6000i、UD49D…

sql数据库的相关概念与底层介绍

本文中的数据库指的是磁盘数据库。如果有sql语言(CRUD,增删改查)的使用经验会更容易理解本文的知识点。 数据库与redis的区别 数据库:数据存储长期在磁盘中,小部分频繁需要的数据会被临时提取在内存中。 Redis&…

np.argsort排序问题(关于位次)-含GitHub上在numpy项目下提问的回复-总结可行方案

np.argsort 与获取位相关问题 位次: 数组中的数据在其排序之后的另一个数组中的位置 [1,0,2,3] 中 0的位次是1 1的位次是2 2的位次是3 3的位次是4 这里先直接给出结论,np.argsort()返回的索引排序与实际位次在确实在某些情况下会出现一致,但后来numpy的开…

用pandas实现用前一行的excel的值填充后一行

今天接到一份数据需要分析,数据在一个excel文件里,内容大概形式如下: 后面空的格子里的值就是默认是前面的非空的值,由于数据分析的需要需要对重复的数据进行去重,去重就需要把控的cell的值补上,然后根据几…

HCIP网络的类型

一.网络类型: 点到点 BMA:广播型多路访问 -- 在一个MA网络中同时存在广播(泛洪)机制 NBMA:非广播型多路访问 -- 在一个MA网络中,没有泛洪机制-----不怎么使用了 MA:多路访问 -- 在一个…

JavaEE 文件操作IO

文件操作&IO 文章目录 文件操作&IO1. 认识文件2. 文件操作2.1 File 类2.2 文件读写2.2.1 FileInputStream2.2.2 FileOutputStream2.2.3 FileReader2.2.4 FileWriter2.2.5 Scanner读取文件 3. 案例练习3.1 案例一3.2 案例二3.3 案例三 在进行文件操作之前,我…

Vue 如何使用WebSocket与服务器建立链接 持续保持通信

WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求,链接建立后,客户端和服务器端就可以通过TCP链接直接交互数据。WebSocket链接后可以通过send()方法来向服务器发送数据,并通过onnessage事件来接受服务器返回的数据。 创…

C语言大师(5)构造函数和析构函数

引言 在C的面向对象编程中,构造函数和析构函数扮演着至关重要的角色。它们分别管理对象的初始化和销毁过程,确保资源的有效分配和释放。了解这些函数如何工作,对于编写高效和可靠的C程序至关重要。 1. 构造函数 构造函数在每次创建类的新对…

数据操作——缺失值处理

缺失值处理 缺失值的处理思路 如果想探究如何处理无效值, 首先要知道无效值从哪来, 从而分析可能产生的无效值有哪些类型, 在分别去看如何处理无效值 什么是缺失值 一个值本身的含义是这个值不存在则称之为缺失值, 也就是说这个值本身代表着缺失, 或者这个值本身无意义, 比如…