找水王

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

posted on 2018-12-20 10:31  meikoqqq  阅读(108)  评论(0编辑  收藏  举报