`
zhongkem
  • 浏览: 151498 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

寻找发帖“水王”

阅读更多

来源:编程之美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+" ");
		}
	}
}

 

分享到:
评论
1 楼 Alex.Jay.Deng 2011-05-07  
您好,public static int[] findMore(int[] data)算法有问题,如果序列是
int id2[]={5,5,5,8,5,5,5,8,5,5,5,8,5,5,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2,2,2,2,2,2,2,2,8,8,6,6};
答案出错。我觉得int[] res=new int[3];存的是相异的数,加上这一点答案应该正确。

相关推荐

    寻找发帖水王

    寻找发帖水王 题目: Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”...

    寻找发帖“水王”(微软)

    ### 寻找发帖“水王”(微软) #### 知识点概述 本文主要介绍了一个有趣而实用的计算机科学问题——如何从一系列发帖记录中找到所谓的“水王”。这里的“水王”指的是发帖数量最多的用户,其发帖数量超过了所有...

    水王之家6KBBS美化插件版 v1.0

    全新特点(详情可以见论坛演示) 全面美化的论坛界面,强大的个人信箱中心; 实用但不豪华的插件,新增的后台管理功能; 1、面版与展区的全面综合:采用功能分类,个性化面版和展区,头部导航分类。...

    水王之家6KBBS美化插件版 v1.5

    《水王之家6KBBS美化插件版 v1.5》是一款专为6KBBS论坛设计的美化增强工具,旨在提升论坛用户界面的视觉效果和交互体验。此版本为v1.5,相较于之前的版本,它引入了更多的个性化元素和管理功能,致力于打造一个更加...

    6KBBS水王之家美化插件版 v1.5.rar

    增加美化: 1.美化了左侧 2.增加每**贴士 3.增加显示IP、浏览器等信息 4.修改签名栏在右侧显示 5.美化的发言的背景,虽然还是有点错误!... 6.... 7.... 8.... 9.... 10.... 11.... 12.... 13.... 14.... 15.... 16.... 17.... 18.... 19.... 20.... 21.... 22....

    经典C程序算法,好东西

    最后,"寻找发帖‘水王’"可能是指在一个论坛或社交网络中找到发帖最多的用户,这需要进行数据处理和排序,可以使用哈希表或者优先队列来快速找到发帖数量最多的用户。 以上每个问题都对应了C++编程和算法设计的...

    机王争霸wap整站2.0

    这是我发布的第一个wap整站程序,以前从没学过asp,很多地方都不足,请大家不要见笑 ^-^ 该程序使用asp语言、access数据库,整合了文章添加、留言本、和评论、自助友链、在线人数统计功能。 你把文件上传到任何...

    水王之家6KBBS美化插件版 v1.61

    全面美化的论坛界面,强大的个人信箱中心;实用但不豪华的插件,新增的后台管理功能; 论坛管理默认用户名:admin 密码:admin

    机王争霸wap论坛 v1.0

    【标题】"机王争霸wap论坛 v1.0"是一个专为移动设备设计的互动社区平台,具备多项先进功能,旨在提供用户一个便捷且丰富的交流环境。作为一款强大的wap(无线应用协议)论坛,它适应了移动互联网的发展,让用户无论...

    面试算法整理

    题目来源于《剑指Offer》这本书中的第29题,同时参考了《编程之美》中关于寻找“发帖水王”的问题。这两个来源均提供了不同的解题思路和方法论。 **解法一:基于快排中分割算法的方法** 1. **基本思想**: - 通过...

    leetcode中国-BeautyOfProgramming:本书的代码

    leetcode中国 Contents Chapter 1 游戏之乐 1.1 让CPU占用率曲线听你指挥 CPU占用率曲线为正弦曲线的效果图 ...寻找发帖的“水王” 妙用抵消法 有一个地方存疑:对于N-1个元素,需要多少次遍历才能

    机王争霸wap论坛1.0

    这是我发布的第一个wap论坛程序 该程序使用asp语言、access数据库,可以说是现今功能最强的wap论坛,支持表情、ubb,可以查看在线、加好友、发短信,有等级,有头像 conn.asp是数据库连接文件 login.asp...

    新课标2020高考语文二轮复习限时练十六文言文阅读范百禄传嵇含传含解析

    "都水王孝先议回河故道"表明是王孝先提出的建议,后面"命百禄行视"是皇帝命令范百禄去查看,因此"故道"后应断开。"百禄以东流高仰"中"以"表示原因,"东流高仰"是"不可回"的原因,故"高仰"后断开。"即驰奏所以然之状...

    MongoDB中强大的统计框架Aggregation使用实例解析

    在实验二中,找到发帖水王,即发布文章最多的作者,可以通过$unwind(如果文章字段是数组)和$group结合作者ID进行计数,然后使用$sort找到最高计数值的作者。 通过熟练掌握这些基本操作,你可以构建复杂的查询来...

    一名高级SEO的成长过程.pdf

    为了提升实战经验,他加入了一家SEO公司,开始接触实际的优化工作,并在A5论坛活跃,逐渐成为“水王”。 在A5论坛的学习过程中,作者积累了大量实践经验,但同时也因过度发布信息而引起了一些争议。然而,这些经历...

    一名高级SEO的成长过程.docx

    成为“水王”意味着在论坛活跃,频繁发帖,虽然初期可能涉及垃圾信息的发布,但随着时间的推移,会更加注重内容的质量和价值。 【职业发展与挑战】 在不同的公司工作,SEO工程师会遇到不同的环境和挑战。在不理想...

    标准模型下安全的基于身份的加密方案.pdf

    在本论文中,水王天芹提出了一种有效的多级基于身份的加密方案,并结合了强一次签名方案,构造了一个在标准模型下具有自适应选择密文攻击(CCA2)语义安全性的IBE方案。该方案的安全性被证明可以归约为双线性群中...

    鱼c小甲鱼零基础学python全套课后题及答案

    【Python 是什么类型的语言?】 Python 是一种高级的、解释型的、面向对象的脚本语言。它以其简洁明了的语法和强大的功能而受到广大程序员的欢迎。Python 语言的设计哲学强调代码的可读性和简洁的语法,尤其是使用...

    [智能社]9小时精讲直播AngularJS课程_附教程课件 【百度云盘】

    AngularJS是一门非常值得学习的编程语言,在这系列中,详细地讲述了AngularJS的使用方法!想要学习AngularJS的不妨点击看看吧!

Global site tag (gtag.js) - Google Analytics