当我读到这个(找到数组中最常见的条目)时,建议使用Boyer和Moore的线性时间投票算法.
如果您点击该站点的链接,则会逐步说明该算法的工作原理.对于给定的序列,AAACCBBCCCBCC它提供了正确的解决方案.
当我们将指针向前移动到元素e上时:
- 如果计数器为0,我们将当前候选设置为e,并将计数器设置为1.
- 如果计数器不为0,我们根据e是否是当前候选者来递增或递减计数器.
当我们完成时,如果存在多数,则当前候选者是多数元素.
如果我在一张纸上使用这个算法AAACCBB作为输入,建议的候选人将成为B显然是错误的.
我认为,有两种可能性
AAACCBBCCCBCC,完全不称职,应该当场解雇(怀疑).注意:这是Niek Sanders 的算法的C++实现.我相信他正确地实现了这个想法,因此它有同样的问题(或者不是吗?).