求数组主元素的O(n)算法
定义#
在一个规模为N的数组A[N]中,所谓主元素就是出现次数大于N/2的元素,例如 3.3.4.2.4.4.2.4.4 有一个主元素为4。
充分利用主元素的出现次数大于N/2这个已知条件,因为主元素的出现次数大于N/2,所以容易证明下面的解法是正确的:
首先假设主元素是X,则遍历数组时出现与X相等的元素时,X出现的数目+1,不相等时,如果计数值变为1,则这个X可能不是主元素,需要将假定值更改为新出现的元素,计数值不为1时,则X出现的数目-1.遍历完后的X就是主元素的可能值。复杂度为O(n)。
其代码如下:
1 #include <iostream> 2 3 using namespace std; 4 5 int get(int A[], int n) 6 { 7 int result, cnt; 8 result = A[0]; 9 cnt = 1; 10 for(int i=1; i<n; i++) 11 { 12 if(A[i] == result) 13 cnt++; 14 else if(cnt == 1) 15 { 16 result = A[i]; 17 cnt = 1; 18 } 19 else 20 cnt--; 21 } 22 cnt=0; 23 for(int i=0; i<n; i++) 24 { 25 if(A[i]==result) 26 cnt++; 27 } 28 29 if(cnt>(n/2)) 30 return result; 31 else 32 return -1; 33 } 34 35 36 int main() 37 { 38 int a[9] = {4,1,4,2,4,3,4,4,5}; 39 cout << get(a, 9); 40 41 42 return 0; 43 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南