您的位置:首页 > 其它

算法之绝对众数

2016-02-28 20:56 323 查看

算法之绝对众数

定义:绝对众数就是一个数在一组数中个数超过1/2的数,假设一组数中绝对众数只有一个,比如

int a[]={8,8,1,1,1,8,1,1,6,1,8};


在这个数组中,1 为绝对众数。

那么我们开始分析:

删除数组中2个不同的数,绝对众数是不变的。我们来思考一下原因:

如果删除的两个数中有一个是众数,显然剩余的众数个数还是大于(N-2)/2的。

如果删除的两个数没有一个是众数,不变。

记m为候选众数,出现次数为c,初始化为0。

遍历数组

如果c = 0,则m = a[i]

如果c !=0,且m != a[i],则删除 m和 a[i]

如果c !=0,且m = a[i],则c++。

代码如下:

#include"stdio.h"
int fun(int a[],int size)
{
int count = 0;
int m = a[0], i;
for(i=0;i<size;i++)
{
if(count==0)
{
m = a[i];
count = 1;
}
else if(m != a[i])
{
count --;
}
else
{
count++;
}
}
return m;
}
int main()
{
int a[]={8,8,1,1,1,8,1,1,6,1,8};
printf("%d",fun(a,sizeof(a)/sizeof(a[0])));

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: