查找出现在超过一半的数组元素中的常量

时间:2014-06-04 17:46:24

标签: c arrays algorithm

有一个整数数组,长度为n。在他的一半以上的元素中,有一个未知的常数k。 您无法更改数组(他是read-only)并且您只有O(1)大小的内存。 您需要找到最佳复杂度的k(您认为自己可以低于O(n)?)

示例:

{1, 6, 44, 1, 1, 8, 1} so k = 1

我考虑过中位数,但我不允许更改数组...

由于

1 个答案:

答案 0 :(得分:5)

我相信这是您正在寻找的:http://www.cs.utexas.edu/users/moore/best-ideas/mjrty/index.html

基本上,您迭代并维护两个数据:候选人和投票计数。每个元素增加或减少投票计数,具体取决于元素本身是否与候选者匹配。如果投票为0,则元素本身成为候选者。

只要存在多数,在迭代过程结束时,当前候选者将成为多数元素。