来源:编程之美2.3
题目:该"水王"发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗?
问题实质:寻找数组中出现的半数以上的数.
思路:如果每次删除两个不同的id,则剩下的水王id依然超过总数的一半,可以不断重复这个过程。
问题扩展:如果有3个id,发贴总数都超过了帖子总数的四个之一,如果快速找到他们。思路都差不多。
/*题目:该"水王"发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,
其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗?
问题实质:寻找数组中出现的半数以上的数.
拓展:有3个数,他们的出现次数都超过了总数的1/4.
*/
public class ShuiWang2_3 {
/**
* @param args
*/
public static void main(String[] args) {
int[] id = { 1, 1, 1, 5, 1, 1, 1, 3, 1, 7, 1, 3, 1, 2, 1, 1, 4, 56, 1, 12, 4, 1, 3, 4,
1, 1, 1, 3, 1, 1, 1, 5, 1, 1, 3, 12, 1, 2, 1, 2, 2, 2, 2, 2,2 };
System.out.println(MoreHalfNum(id,id.length));
int id2[] = {5, 5, 5, 7, 7, 8, 8, 8, 8, 2,
2, 2, 2, 2, 2, 2, 2, 5, 5, 5,
6, 5, 6, 7, 7, 7, 7, 7, 7, 7,
7, 5, 7, 2, 2, 2, 5, 5, 5, 8};
printArr(findMore(id2));
}
//每次从数组中删除两个不同的数,不断重复这个过程
//算法中当然不是真的删除数,而是用一个计数器巧妙的实现“删除”
public static int MoreHalfNum(int data[],int n)
{
int candidate=0;//候选值
int nTime=0;//候选值出现的次数
for(int i=0;i<n;i++){
if(nTime==0)//nTime为0时说明需要重新立候选值
{
candidate=data[i];
nTime++;
}else{
if(data[i]==candidate)nTime++;//又出现了,权值加1
else nTime--;//不等,权值减1
}
}
return candidate;
}
public static int[] findMore(int[] data){
int[] res=new int[3];//数组,存出现次数最多的三个数
int[] nTimes={0,0,0};//数组,存每个候选值出现的次数
int i;
for(i=0;i<data.length;i++){
int index;
//1.如果存在某个index,使得nTimes[index]==0,则重新赋候选值
for(index=0;index<3;index++){
if(nTimes[index]==0){
res[index]=data[i];
nTimes[index]++;
break;
}
}
if(index<3)continue;
//2.如果存在index,满足res[index]=id[i]),则对应权值加1
for(index=0;index<3;index++){
if(res[index]==data[i]){
nTimes[index]++;
break;
}
}
if(index<3)continue;
//3.其它情况,对应权值都减1
for(index=0;index<3;index++){
nTimes[index]--;
}
}
return res;
}
private static void printArr(int[] a){
for(int s:a){
System.out.print(s+" ");
}
}
}
分享到:
相关推荐
寻找发帖水王 题目: Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”...
### 寻找发帖“水王”(微软) #### 知识点概述 本文主要介绍了一个有趣而实用的计算机科学问题——如何从一系列发帖记录中找到所谓的“水王”。这里的“水王”指的是发帖数量最多的用户,其发帖数量超过了所有...
全新特点(详情可以见论坛演示) 全面美化的论坛界面,强大的个人信箱中心; 实用但不豪华的插件,新增的后台管理功能; 1、面版与展区的全面综合:采用功能分类,个性化面版和展区,头部导航分类。...
《水王之家6KBBS美化插件版 v1.5》是一款专为6KBBS论坛设计的美化增强工具,旨在提升论坛用户界面的视觉效果和交互体验。此版本为v1.5,相较于之前的版本,它引入了更多的个性化元素和管理功能,致力于打造一个更加...
增加美化: 1.美化了左侧 2.增加每**贴士 3.增加显示IP、浏览器等信息 4.修改签名栏在右侧显示 5.美化的发言的背景,虽然还是有点错误!... 6.... 7.... 8.... 9.... 10.... 11.... 12.... 13.... 14.... 15.... 16.... 17.... 18.... 19.... 20.... 21.... 22....
最后,"寻找发帖‘水王’"可能是指在一个论坛或社交网络中找到发帖最多的用户,这需要进行数据处理和排序,可以使用哈希表或者优先队列来快速找到发帖数量最多的用户。 以上每个问题都对应了C++编程和算法设计的...
这是我发布的第一个wap整站程序,以前从没学过asp,很多地方都不足,请大家不要见笑 ^-^ 该程序使用asp语言、access数据库,整合了文章添加、留言本、和评论、自助友链、在线人数统计功能。 你把文件上传到任何...
全面美化的论坛界面,强大的个人信箱中心;实用但不豪华的插件,新增的后台管理功能; 论坛管理默认用户名:admin 密码:admin
【标题】"机王争霸wap论坛 v1.0"是一个专为移动设备设计的互动社区平台,具备多项先进功能,旨在提供用户一个便捷且丰富的交流环境。作为一款强大的wap(无线应用协议)论坛,它适应了移动互联网的发展,让用户无论...
题目来源于《剑指Offer》这本书中的第29题,同时参考了《编程之美》中关于寻找“发帖水王”的问题。这两个来源均提供了不同的解题思路和方法论。 **解法一:基于快排中分割算法的方法** 1. **基本思想**: - 通过...
leetcode中国 Contents Chapter 1 游戏之乐 1.1 让CPU占用率曲线听你指挥 CPU占用率曲线为正弦曲线的效果图 ...寻找发帖的“水王” 妙用抵消法 有一个地方存疑:对于N-1个元素,需要多少次遍历才能
这是我发布的第一个wap论坛程序 该程序使用asp语言、access数据库,可以说是现今功能最强的wap论坛,支持表情、ubb,可以查看在线、加好友、发短信,有等级,有头像 conn.asp是数据库连接文件 login.asp...
"都水王孝先议回河故道"表明是王孝先提出的建议,后面"命百禄行视"是皇帝命令范百禄去查看,因此"故道"后应断开。"百禄以东流高仰"中"以"表示原因,"东流高仰"是"不可回"的原因,故"高仰"后断开。"即驰奏所以然之状...
在实验二中,找到发帖水王,即发布文章最多的作者,可以通过$unwind(如果文章字段是数组)和$group结合作者ID进行计数,然后使用$sort找到最高计数值的作者。 通过熟练掌握这些基本操作,你可以构建复杂的查询来...
为了提升实战经验,他加入了一家SEO公司,开始接触实际的优化工作,并在A5论坛活跃,逐渐成为“水王”。 在A5论坛的学习过程中,作者积累了大量实践经验,但同时也因过度发布信息而引起了一些争议。然而,这些经历...
成为“水王”意味着在论坛活跃,频繁发帖,虽然初期可能涉及垃圾信息的发布,但随着时间的推移,会更加注重内容的质量和价值。 【职业发展与挑战】 在不同的公司工作,SEO工程师会遇到不同的环境和挑战。在不理想...
在本论文中,水王天芹提出了一种有效的多级基于身份的加密方案,并结合了强一次签名方案,构造了一个在标准模型下具有自适应选择密文攻击(CCA2)语义安全性的IBE方案。该方案的安全性被证明可以归约为双线性群中...
【Python 是什么类型的语言?】 Python 是一种高级的、解释型的、面向对象的脚本语言。它以其简洁明了的语法和强大的功能而受到广大程序员的欢迎。Python 语言的设计哲学强调代码的可读性和简洁的语法,尤其是使用...
AngularJS是一门非常值得学习的编程语言,在这系列中,详细地讲述了AngularJS的使用方法!想要学习AngularJS的不妨点击看看吧!