面试题:n个整数的序列,其中一个整数重复次数超过一半,在O(n)时间内找出该整数

本文探讨了如何在不指定投票人的情况下,通过两种方法找出得票最多的100个候选人。包括一种基于投票机制的方法和另一种通过不断删除不同数对的方法来找出重复数目最大的数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先列出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个候选人来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值