当我阅读本文时(在数组中查找最常见的条目),建议使用Boyer 和 Moore 的线性时间投票算法。
如果您点击该网站的链接,则会逐步解释该算法的工作原理。对于给定的序列,AAACCBBCCCBCC
它提供了正确的解决方案。
当我们将指针向前移动到元素 e 上时:
- 如果计数器为 0,我们将当前候选设置为 e,并将计数器设置为 1。
- 如果计数器不为 0,我们根据 e 是否是当前候选者来增加或减少计数器。
完成后,如果有多数,则当前候选人是多数元素。
如果我在一张纸上使用这个算法AAACCBB
作为输入,建议的候选人将变成 B,这显然是错误的。
在我看来,有两种可能
- 作者从未在任何其他方面尝试过他们的算法
AAACCBBCCCBCC
,完全无能,应该当场解雇(怀疑)。 - 我显然遗漏了一些东西,必须从 Stackoverflow 被禁止,并且永远不能再接触任何涉及逻辑的东西。
注意:这是来自 Niek Sanders的算法的 C++ 实现。我相信他正确地实现了这个想法,因此它有同样的问题(或者不是吗?)。