给定一个包含 N 个元素的数组。我们知道其中一个元素至少重复 N/2 次。
我们对其他元素一无所知。它们可能是重复的,也可能是唯一的。
有没有办法找出单次重复至少 N/2 次或者可能是 O(N) 的元素?
无需使用额外空间。
由于其他用户已经发布了该算法,我不再重复。不过,我提供了一个关于其工作原理的简单解释:
考虑下图,它实际上是非偏振光的图:
从中心开始的每个箭头代表不同的候选人。想象一下箭头上的某个点代表计数器和候选者。最初计数器为零,因此它从中心开始。
当找到当前候选者时,它会朝该箭头的方向移动一步。如果发现不同的值,计数器将向中心移动一步。
如果存在多数值,则超过一半的移动将朝向该箭头,因此算法将以当前候选值作为多数值结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)