1、题目要求:
在一个论坛中,有一个用户,他的发帖量在总帖数中占了一半以上,并且在每一个帖子下都有他的回复,人们管他叫水王
用最简单、快速的方法找到这个水王
2、实现思路:
在一个列表中,找到一个出现次数最高的发帖人,发帖数量占总帖数的一半以上!
可以的方法很多,甚至可以统计每一个用户的发帖量,进行查找最大的那个(当然这只是第一想法,肯定不是最快也不是最简便的)
在老师的提示下,想到了这么一个方法,两两消除不同的 id号,最终剩下的就是那个水王
根据一个基本假设(假设n为总数,m 为水王发帖数,占到了一半以上)
m/n > 1/2
那么,当消除的都不是水王时,分母减小,分数值增大 m/(n-2) > 1/2依旧是成立的;
当消除了的是一个水王和非水王时,(m-1)/(n-1)>1/2 成立,(m-1)/(n-1-1)>1/2依然成立。
即水王帖数仍然在一半以上!所以这个方法是等效的,符合要求。消到最后,都剩下相同的了,就是水王。
3、思路整理(实现步骤):
不需要真正对列表进行删除相消(前提:这个列表中必须有一个符合条件的水王)
①将第一个id 假设为king,king比其他id多出现频数num设为1
②将第二个id 与当前king比较,不同的话,将原来king的num值减 1,
若num为0了,直接跳过这个id,将下一个id作为king;若num不为0,king依然为当前king
③若相同的话,原来的num加一,说明,又多出了一个king id
循环②和③,直到最后一个数,king值就是水王的id