摩尔投票法:线性时间寻找多数元素的优雅算法
摩尔投票法线性时间寻找多数元素的优雅算法在算法面试和数据处理中我们常遇到一类问题给定一个长度为n的数组找出其中出现次数超过n/2的“多数元素”众数。若不做特殊限制最直观的做法是用哈希表统计频次时间复杂度O(n)空间复杂度O(n)。但能否在O(n)时间 O(1)空间内完成答案是肯定的——这就是摩尔投票法Boyer–Moore Majority Vote Algorithm。一、算法核心思想摩尔投票法巧妙地将“投票”与“抵消”机制结合其逻辑极为简洁维护一个候选元素candidate和一个计数器count初始count 0。遍历数组每个元素num若count 0则将candidate设为当前num。若num candidate则count否则count--。遍历结束后candidate即为多数元素若确实存在。这背后的直观理解是不同的元素两两配对抵消最终剩下的就是出现次数过半的那个胜者。二、代码实现解析以下 Java 方法完美实现了该算法publicstaticintgetMaxCount(int[]ans){intcount0;inttemp0;for(intnum:ans){if(count0){tempnum;}count(numtemp)?1:-1;}returntemp;}逐行解读行/操作说明count 0意味着之前候选元素已被完全抵消重新选定当前元素为候选num temp→1当前元素与候选相同则加一票num ! temp→-1不同则减一票相当于一次抵消最终temp经过多轮抵消后存活的候选元素为何不必二次验证重要前提该算法仅在题目保证多数元素一定存在时返回结果必定正确。若多数元素不存在如数组[1, 2, 3]算法仍会返回一个值但该值并非真正众数。因此在实际工程中如果无法确保输入条件通常需要再遍历一次数组验证候选者的频次是否超过n/2。三、复杂度与适用场景项目指标时间复杂度O(n)仅一次遍历空间复杂度O(1)仅两个变量适用场景流式数据、单次遍历、内存受限环境典型题目LeetCode 169— 多数元素面试高频手写题四、示例运行分析int[]ints{2,1,6,5,6,1,1,1,1,1,1,4,0};通过printArrayDetail我们得到频次分布元素出现次数占比17≈ 53.85%其余元素6≈ 46.15%元素1出现 7 次占比约53.85%超过半数。算法遍历过程初始候选 2 → 被后续 1、6、5 等逐步抵消 → 最终候选锁定为 1 ✅与统计结果完全吻合。你贴心地打印了每个元素的详细计数和百分比这对调试和理解数据分布很有帮助。完整代码importjava.util.HashMap;importjava.util.Map;publicclassMaxCount{publicstaticvoidmain(String[]args){int[]ints{2,1,6,5,6,1,1,1,1,1,1,4,0};intmaxCountgetMaxCount(ints);printArrayDetail(ints);System.out.printf(Result: %s%n,maxCount);}publicstaticintgetMaxCount(int[]ans){intcount0;inttemp0;for(intnum:ans){if(count0){tempnum;}count(numtemp)?1:-1;}returntemp;}publicstaticvoidprintArrayDetail(int[]ans){MapInteger,IntegermapnewHashMap();for(intnum:ans){map.put(num,map.getOrDefault(num,0)1);}map.forEach((k,v)-{StringformattedString.format(* Element(%s) - Count(%s) - Percent(%.2f%%),k,v,v*100.0/ans.length);System.out.println(formatted);});}}运行结果F:\code26\env\jdk\bin\java.exe -javaagent:F:\program_files\idea-2026.1.win\lib\idea_rt.jar10378 -Dfile.encodingUTF-8 -Dsun.stdout.encodingUTF-8 -Dsun.stderr.encodingUTF-8 -classpath F:\code26\test-java\out\production\test-java MaxCount * Element(0) - Count(1) - Percent(7.69%) * Element(1) - Count(7) - Percent(53.85%) * Element(2) - Count(1) - Percent(7.69%) * Element(4) - Count(1) - Percent(7.69%) * Element(5) - Count(1) - Percent(7.69%) * Element(6) - Count(2) - Percent(15.38%) Result: 1 Process finished with exit code 0五、扩展思考摩尔投票法的变体变体说明出现次数 n/3可维护两个候选及对应计数额外增加一次验证非整数倍阈值通过调整抵消条件可适配不同比例要求数据流场景算法天然支持流式处理只需常量内存即可实时输出当前候选六、总结摩尔投票法以极其精妙的“抵消”思路用常量空间解决了看似需要哈希表的问题。它不仅是算法竞赛中的背板题更体现了通过问题特性优化资源的工程思维。当你下次面对多数元素问题时不妨用这短短几行代码展现你的算法功底。✨记住多数元素的票数优势足以让它在抵消浪潮中最后屹立不倒。

相关新闻

最近体验了一下 Visible Coding,AI 编程方式确实变了

最近体验了一下 Visible Coding,AI 编程方式确实变了

最近在体验 Visible Coding 相关的一些开发方式,最大的感受就是:以前更多是「写代码」,现在越来越像是在「描述需求」。 对于一些简单的工具、脚本或者页面,只需要把需求描述清楚,AI 就能够快速生成一个可运行的版本&…

2026/7/2 4:38:47阅读更多 →
Dify接入高德地图MCP服务详细配置教程

Dify接入高德地图MCP服务详细配置教程

一、获取高度地图API KEY 1、注册成为开发者 进入高德开放平台:https://lbs.amap.com/ 注册成为开发者,需要实名认证 2、获取应用API Key 控制台-->应用管理-->我的应用 (1)点击创建新应用,弹出新建应用弹窗…

2026/7/2 4:33:45阅读更多 →
ROS2 Jazzy 动作通信 (Action) 完整实战教程(C+++Python 双实现)

ROS2 Jazzy 动作通信 (Action) 完整实战教程(C+++Python 双实现)

一、前言动作通信(Action)是 ROS2 中用于长时间任务交互的通信模型,兼具服务同步应答、话题持续反馈的优势,适用于机械臂运动、导航、累加计算等耗时任务。 本文从零搭建自定义 Action 消息,分别使用 C、Python 实现动…

2026/7/2 4:33:45阅读更多 →
智能工牌合规方案:授权录音、加密传输与最小权限控制的工程实践

智能工牌合规方案:授权录音、加密传输与最小权限控制的工程实践

门店销售接待的过程,长期以来像一个“黑盒”——管理者知道结果,却难以看清每一次接待中到底发生了什么。销售人员的话术是否到位、客户的真实意向如何、哪些环节导致了丢单,往往只能凭感觉复盘。随着AI技术落地,一批专门针对销售…

2026/7/2 5:48:53阅读更多 →
3分钟上手TranslucentTB:让你的Windows任务栏焕然一新的透明美化神器

3分钟上手TranslucentTB:让你的Windows任务栏焕然一新的透明美化神器

3分钟上手TranslucentTB:让你的Windows任务栏焕然一新的透明美化神器 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要摆脱…

2026/7/2 5:48:53阅读更多 →
.NET 7 SDK、Desktop development with C++ workload。

.NET 7 SDK、Desktop development with C++ workload。

IDE:Visual Studio 2022 Desktop development with C workload 是一个工具集,里面包含 C 开发工具,需要在 Visual Studio Installer 中安装,如下图红框中所示。 创建一个控制台项目 首先创建一个 .NET 7 控制台项目,…

2026/7/2 5:48:53阅读更多 →
联想拯救者独显报 43 花屏黑屏维修|20 年曾工芯片重植低温锡通病修复

联想拯救者独显报 43 花屏黑屏维修|20 年曾工芯片重植低温锡通病修复

不少联想拯救者 Y7000P/Y9000P/R9000P 玩家都遇到同款故障:设备管理器独显带黄色感叹号,提示代码 43,重装驱动、重装系统很难解决问题,伴随花屏、条纹、黑屏、游戏掉帧、独显无法正常工作等情况。电脑长期高负载游戏、冷热交替&am…

2026/7/2 5:48:53阅读更多 →
轮式双臂机器人在VLA大模型时代的科研价值与产业应用

轮式双臂机器人在VLA大模型时代的科研价值与产业应用

摘要轮式双臂机器人通过”移动底盘仿生双臂”复合架构,在具身智能、柔性制造与科研教育领域展现显著成本效益与场景适应性。2026年中国轮式双臂机器人市场规模预计突破18亿元,增速达350%。本文梳理技术架构与应用场景,以时空行者行者R1为典型…

2026/7/2 5:48:53阅读更多 →
【EI会议】智能交通系统与自动化控制方向

【EI会议】智能交通系统与自动化控制方向

2026智能交通系统与自动化控制国际会议(ITSAC 2026) 时间:2026年7月4-5日 地点:河南省-洛阳市 论文出版:SPIE 论文收录:EI Compendex、Scopus 会议主题:智能交通系统;交通建模与仿真…

2026/7/2 5:43:53阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →