算法分析--寻找多数元素

news/2025/10/27 13:36:08/文章来源:https://www.cnblogs.com/LiangjingLiu/p/19166149

简介

  • 给出n个元素的数组,希望找出其中数量超过 n/2 的元素。注意是>,不是>=。
  • 题目保证一定有多数元素,但是这里给出了没找到多数元素的情况。
  • 时间复杂度O(n)

法一:遍历计数

  • 对每个出现的元素都遍历一遍,求出其次数。
  • 或者通过链表,在节点里面加上元素出现次数这个信息,寻找节点里面count最大的元素。

法二:排序取中

  • 相对于暴力的遍历,排序取中算法是在排序好的数组中取中间元素,这个元素一定是多数元素。
  • 但是有时候对数组进行排序也很麻烦。

法三:剔除元素

前情提要:在原序列剔除两个不同的元素,多数元素不变,还是原来那个。简单证明如下:

  • 假设多数元素个数为c,其他元素个数n-c;
  • 若剔除一个多数元素,一个其他元素,原来就满足c>n/2,与现在满足多数元素的条件 c-1>(n-2)/2 完全等价
  • 若剔除两个不同的其他元素,多数元素在新数组里面的数量优势还被放大了,更加满足多数元素的条件。
代码编写细节

删除这个操作在内存上是不好做的,我们用count这个变量来模拟删除操作。count是当前候选元素和其他元素的个数相减,也就是净个数。当等于0,就可以把前面的元素都舍弃。

// 递归,寻找多数元素的候选者
int candidate(int a[],int n,int start) {if(start>=n)return -9999;int i=start;     int c=a[start];  // 候选元素cint count =1;while(i<n-1 && count>0){ // 目前候选元素个数比较多(count>0),并且还没比较完所有的元素,继续循环。i++;if(a[i]==c)  count++;else  count--;}if(i==n-1) return c;else return candidate(a,n,i+1);
}

这个函数返回c或者-9999;但是实际上只要i遍历到了最后一个元素,即是他不是多数元素,他也会被返回。
image
所以我们再次验证:

int main(){int n;cin>>n;int a[n];for(int i=0;i<n;i++) cin>>a[i];int c=candidate(a,n,0);if(c==-9999) cout<<"没有多数元素";else{int count=0;for(int i=0;i<n;i++)if(a[i]==c) count++;if(count > (n/2) ) cout<<c;else cout<<"没有多数元素";}return 0;
}

以上两段拼起来就是完整代码,如下:

点击查看代码
#include<iostream>
using namespace std;
int candidate(int a[],int n,int start) {if(start>=n)return -9999;int i=start;     int c=a[start];  // 候选元素cint count =1;while(i<n-1 && count>0){ // 目前候选元素个数比较多(count>0),并且还没比较完所有的元素,继续循环。i++;if(a[i]==c)  count++;else  count--;}if(i==n-1) return c;else return candidate(a,n,i+1);
}
int main(){int n;cin>>n;int a[n];for(int i=0;i<n;i++) cin>>a[i];int c=candidate(a,n,0);if(c==-9999) cout<<"没有多数元素";else{int count=0;for(int i=0;i<n;i++)if(a[i]==c) count++;if(count > (n/2) ) cout<<c;else cout<<"没有多数元素";}return 0;
}

附:确保数组一定有多数元素的版本:

点击查看代码
#include<iostream>
using namespace std;
int candidate(int a[],int n,int start) {int i=start;     int c=a[start];  // 候选元素cint count =1;while(i<n-1 && count>0){ i++;if(a[i]==c)  count++;else  count--;}if(i==n-1 || count>0 ) return c;else return candidate(a,n,i+1);
}
int main(){int n;cin>>n;int a[n];for(int i=0;i<n;i++) cin>>a[i];int c=candidate(a,n,0);cout<<c;return 0;
}

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

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

相关文章

2025年物流货架厂家权威推荐榜:重型货架/阁楼货架/自动化立库货架,专业设计与承重性能深度解析

2025年物流货架厂家权威推荐榜:重型货架/阁楼货架/自动化立库货架,专业设计与承重性能深度解析 行业背景与发展趋势 随着现代物流业的快速发展,仓储系统的智能化、高效化已成为企业提升竞争力的关键环节。物流货架作…

吴恩达深度学习课程一:神经网络和深度学习 第四周:深层神经网络的关键概念 课后作业和代码实践

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

2025年天金冈货架厂家权威推荐榜:重型货架,阁楼货架,仓储货架,自动化立库货架专业制造商实力解析

2025年天金冈货架厂家权威推荐榜:重型货架,阁楼货架,仓储货架,自动化立库货架专业制造商实力解析 行业背景与发展趋势 随着现代物流业的快速发展,仓储货架行业正经历着深刻变革。作为仓储系统的核心组成部分,货架…

Tlias系统实战

目录静态网页flex布局表单表单项表格总结:JavaScript导入变量和常量数据类型函数匿名函数自定义对象JSONDOMDOM操作事件 静态网页 flex布局表单<!-- 表单部分 action属性指定表单提交的URL,method属性指定提交方…

Launcher 桌面源码笔记二

Launcher 桌面源码笔记二车模桌面加载成功后,需要各种交互 切换桌面处理 先补充如何切换桌面,初始化需要指定一个默认桌面,初始化其实两个桌面都会一起加载,假设默认是车模桌面,地图将不会初始化操作,但是地图桌…

2025年冷水机厂家权威推荐榜:开放式冷水机/离心式冷水机/工业小型冷水机/水冷螺杆冷水机/风冷螺杆冷水机/螺杆式冷水机专业选购指南

2025年冷水机厂家权威推荐榜:开放式冷水机/离心式冷水机/工业小型冷水机/水冷螺杆冷水机/风冷螺杆冷水机/螺杆式冷水机专业选购指南 行业背景与发展趋势 工业制冷领域作为现代制造业的重要支撑环节,其技术发展与产业…

2025年定制多层重型货架厂家推荐排行榜,仓库货架,重型仓储货架,阁楼货架,立体库货架公司精选

2025年定制多层重型货架厂家推荐排行榜 行业背景与发展趋势 随着现代物流业的快速发展,仓储设备行业迎来了前所未有的发展机遇。定制多层重型货架作为仓储系统的核心组成部分,其市场需求持续增长。在智能制造、新零售…

2025年定制钢平台货架厂家推荐排行榜,阁楼式钢平台货架,重型钢平台货架,仓储钢平台货架,定制钢平台货架公司精选

2025年定制钢平台货架厂家推荐排行榜:专业选购指南与权威品牌解析 在现代仓储物流体系快速发展的背景下,定制钢平台货架作为空间优化与存储效率提升的关键设备,正受到越来越多企业的重视。不同类型的钢平台货架,包…

2025年上下料机器人厂家权威推荐榜:专业自动化解决方案与高效生产系统深度解析

2025年上下料机器人厂家权威推荐榜:专业自动化解决方案与高效生产系统深度解析 随着制造业智能化转型的深入推进,上下料机器人作为工业自动化系统的关键组成部分,正迎来前所未有的发展机遇。在2025年这个智能制造技…

C#中的 Span、fixed、多维数组

在C#中,多维数组(如double[,])与交错数组(double[][])不同。 多维数组是矩形数组,在内存中是连续存储的。 但是,Span最初是为连续内存区域设计的,因此对于多维数组,我们可以使用MemoryMarshal来创建一个Span,…

2025年板材重型货架厂家推荐排行榜,重型仓储货架,仓库重型货架,阁楼式重型货架,定制重型货架公司精选!

2025年板材重型货架厂家推荐排行榜 在当今快速发展的工业环境中,仓储物流系统的高效运作已成为企业竞争力的重要组成部分。板材重型货架作为现代仓储系统的核心基础设施,其质量与性能直接影响着企业的仓储效率与运营…

2025年10月离婚房产律师对比榜:五强权威排名

2025年10月,离婚房产律师需求进入年度高峰。婚姻登记机关数据显示,三季度北上广深离婚登记量环比上升12%,其中涉及房产分割的占比超过七成。用户普遍面临“房产价值高、证据链条长、政策差异大”三大痛点:一线城市…

2025年冷库重型货架厂家权威推荐榜:专业定制重型仓储货架,适用于低温冷库环境,提供耐用承重解决方案及批发采购指南

2025年冷库重型货架厂家权威推荐榜:专业定制重型仓储货架,适用于低温冷库环境,提供耐用承重解决方案及批发采购指南 行业背景与发展趋势 随着冷链物流行业的快速发展,冷库重型货架作为仓储系统的核心装备,正面临着…

2025年口碑好的公司注册代理记账外包

2025年口碑好的公司注册代理记账外包推荐 在当今竞争激烈的商业环境中,选择一家专业、可靠的代理记账和公司注册服务提供商至关重要。优秀的财税服务不仅能帮助企业合规经营,还能优化税务筹划,降低运营成本。2025年…

2025年热门的目视化规划落地最新推荐榜单集团

2025年热门的目视化规划落地最新推荐榜单集团在数字化转型加速的2025年,目视化规划已成为企业提升运营效率、强化安全管理、塑造品牌形象的关键工具。优秀的目视化规划不仅能将复杂信息直观呈现,更能通过科学的空间设…

2025年定制纺织重型货架厂家推荐排行榜,仓库重型货架,工业重型货架,仓储重型货架,阁楼重型货架公司推荐

2025年定制纺织重型货架厂家推荐排行榜 行业背景与发展趋势 纺织行业作为传统制造业的重要组成部分,其仓储物流体系正面临转型升级的关键时期。随着纺织产业向智能化、高效化方向发展,对专业仓储设备的需求日益增长。…

2025年靠谱的工厂团餐配送最新推荐榜单品牌

2025年靠谱的工厂团餐配送最新推荐榜单品牌 引言 在快节奏的现代工业环境中,工厂团餐配送服务的质量直接影响员工的工作效率和满意度。优质的团餐供应商不仅能提供营养均衡的餐食,还能通过高效的管理和灵活的配送方…

2025年比较好的布里斯班澳洲海外仓电话

2025年布里斯班澳洲海外仓Top5推荐及电话指南 随着跨境电商的蓬勃发展,澳洲海外仓成为卖家布局大洋洲市场的关键枢纽。布里斯班作为昆士兰州核心港口城市,凭借优越的地理位置和物流基础设施,吸引众多海外仓服务商入…

新概念1-第一课

excuse me  打扰一下 or 借过一下 or 让一下没听清麻烦再说一次的 3种表达 pardon    【简易,口语表达】 i deg you pardon 很正式场合或者不是很熟悉说这个非常感谢的2种表达方式 thank you so much    …

2025年热门的logo VI设计实力公司

2025年热门的logo VI设计实力公司权威推荐指南在品牌竞争日益激烈的商业环境中,企业视觉识别系统(VIS)已从简单的视觉包装升维为企业战略的核心组成部分。优秀的VI设计不仅能提升品牌辨识度,更能通过系统化的视觉语…