码迷,mamicode.com
首页 > 其他好文 > 详细

寻找发帖水王01

时间:2016-05-16 21:52:36      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

设计思想:

  每次从ID列表中删除两个不同的ID,不影响“水王的ID在剩余ID中仍然超过一半”这一事实,因此每次删除两个不同的ID,直到剩下的所有ID都相同,那么剩下的就是水王的ID。

具体实现:

  具体编程的时候,使用一个candidate记录当前猜测的水王ID,一个count记录其累计次数,然后遍历整个ID列表,对于当前所考查的ID,如果和candidate相同,那么count++,如果不同,那么count--,这个“count--;”的动作就是“删除两个不同的ID”在程序中的体现,当count==0时,则更新candidate。这样呢,每次count--都相当于删除了两个不同的ID(可能包含水王的,也可能不包含),而每考察一个ID,要么会做count--的动作,要么会做count++的动作,两者必居其一,而由于“水王ID超过一半”这一事实,因此count--的次数一定比count++少,因此最后count一定是个正整数,且此时的candidate一定记录着水王的ID。

寻找发帖水王01

标签:

原文地址:http://www.cnblogs.com/JYQ-hu/p/5499314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!