算法之绝对众数
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;
}
相关文章推荐
- 《逻辑思维简易入门》(第2版) 阅读笔记1
- 冒泡排序法与二分查找法
- Oracle备份 DataGuard简介
- Android根据联系人姓名首字符顺序读取通讯录
- Java中String和CharSequence的关系
- CSU 1660: K-Cycle
- 如何设置浏览器查看代码时的编码格式
- 【leetcode】第48题:矩阵转置90度
- 半年总结
- Linux信号概述
- QML 中神秘的 Component
- stat查找权限以数字形式显示
- kali2.0 Metasploit连接postgres数据库
- C json实战引擎 二 , 实现构造部分
- (2016.2.28)寒假第三次作业随笔
- ROS launch file 写法
- linux精讲——su切换用户
- 删除事件处理程序如何解决
- ubuntu 系统配置维护 常用命令
- MOOC《Linux内核分析》第一课