先列出2个牛人给出的较好的答复
方法1:既然过半,那么用这个数与其他数配对的话,剩余的数字一定还是过半的这个数字。因此可以通过不断删除不同的2个数,直到没有不同的2个数,那么这个数就是要找的数。
证明:最坏情况下,只有这个数同别的数配对,并且被删除,剩下的仍旧是这个数,因此得证。
链接:http://blog.163.com/xie_wenbin613/blog/static/175489095201242625851399/ 中第4方法;
方法2:是一种投票思路,定义2个变量;1个为候选人,另外1个为投票数。如果下一个人投票相同,则投票数加1,否则减1,当投票数小于0时,则更换为此时的候选人。循环一遍,剩下来的最后剩下来的就是这个数;
证明:其中1个人投票过半,则剩余的人的票循环结束后,一定小于0,通过反正得证。
同样给出链接:http://kenby.iteye.com/blog/1031114 我们要尊重别人的成果。
在这里讨论的目的,是想继续推广下,找出重复数目最大的100个数。或者说:在不指定投票人的情况下,找出得票最多的100个候选人来。