寻找发帖“水王”
来源:互联网 发布:linux mysql启动命令 编辑:程序博客网 时间:2024/06/05 08:38
发帖水王发帖数目超过帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在里面,要求快速找出这个传说中的水王。
方法一:最直接的方法,对所有ID进行排序,然后再扫描一遍排好的序的ID列表,统计各个ID出现的次数。如果某个ID出现的次数超过总数的一半,则输出这个ID。这个算法的时间复杂度为O(N*logN+N)。
方法二:如果ID列表已经是有序的,那么ID列表的第N/2项(从0开始编号)一定是这个ID。显然,水王ID出现超过N/2,所以N/2这个下标ID一定在水王ID数组区间中。如果不是超过,而是大于等于还是有问题,如4个,水王占两个,如果前两个是水王ID,则4/2=2不是水王ID。
方法三(写的算法很精辟):每次删除两个不同的ID,那么在剩下的ID列表中,“水王”ID出现的次数仍然超过总数的一半。通过不断反复这个过程,把ID列表中的ID总数降低,从而得到问题答案。总时间复杂度为O(N)。
//很好的想法,i一直在增加,nTimes用来记录前面元素的火拼数目,如果nTimes变成0了,则候选元素就替换成ID[i]了。只有水王才能将nTimes一直维持,直到最后。
Type Find(Type* ID,int N){
Typecandidate;
intnTimes,i;
for(inti = nTimes=0;i<N;i++){
if(nTime==0){
candidate=ID[i],nTime=1;
}else{
if(candidate==ID[i])
nTimes++;
else
nTimes--;
}
}
return candidate;
}- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找“发帖”水王
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖“水王”
- 寻找发帖”水王“
- 寻找发帖"水王" 扩展
- 寻找发帖“水王”
- 2.3 寻找发帖“水王”
- 2.3 寻找发帖"水王"
- 算法之寻找发帖"水王"
- 寻找发帖“水王” 扩展题
- 运算符优先级
- 丢失或损坏NDF文件如何附加数据库
- winform 分页
- 求二进制数中1的个数
- 认识smack中的基本对象 - 接口PacketFilter
- 寻找发帖“水王”
- MySQL基础入门:MySQL简介、安装、配置
- float类型的值后要加f
- LWIP互联网资料汇总
- 保证只创建一次
- 刘强东“反腐”:贪10万,我花一千万也要把你查出来!
- telerik:RadGrid导出Excel隐藏列
- 寻找最大的K个数
- [小说]魔王冢(26)复合