众数问题
来源:互联网 发布:mac itunes 快捷键 编辑:程序博客网 时间:2024/04/27 09:16
若A[1..n]中有一个数出现次数大于n/2,在O(n)时间内找出众数及其重数
思路:
因为众数出现次数多于n/2,
那么,从A[]中取一对不同的数,删除,如此重复。最后剩下的或为一个数,或为一组相同的数,它就是我们要找的众数。
这样,两次遍历数组,一次找到众数,一次记数其重数。时间O(n)。
#include <stdio.h>
#include <stdlib.h>
void main()
{ //若A[1..n]中众数出现次数多于n/2,O(n)时间的算法
int A[]={0,2,3,2,2,4,2,2,5,2,2,2,6,2,7,8,2,2,4,4};
int Count = 1;
int H = A[0];
int n = sizeof(A)/sizeof(int);
printf("%d/n",n);
int i;
for(i=1; i<n; i++) //找出众数
{
if( H == A[i])
Count++;
else
{
Count--;
if(Count == 0)
{
i = i + 1;
H = A[i];
Count = 1;
}
}
}
Count = 0;
for(i=0; i<n; i++) //记数其重数
{
if( A[i]==H)
Count++;
}
printf("众数:%d,重数:%d",H,Count);
}
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- 众数问题
- ubuntu CVS Server 安装
- C语言写CGI程序【转】
- C++ traits初探
- Windows 系统安全分析
- UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)【转】
- 众数问题
- 网络编程之同步,阻塞,异步,非阻塞-网络编程【转】
- NetBIOS 漏洞的入侵与防御
- VC++中的数据型转换
- VoIP穿越NAT和防火墙的方法【转】
- sql 连接
- 使用SetSysColors 修改系统颜色
- Linux系统管理实践(9):DHCP服务器配置
- 解决URLDownloadToFile缓存问题的两种方法【转】