有一个整数数组,长度为n。在他的一半以上的元素中,有一个未知的常数k
。
您无法更改数组(他是read-only
)并且您只有O(1)
大小的内存。
您需要找到最佳复杂度的k
(您认为自己可以低于O(n)
?)
示例:
{1, 6, 44, 1, 1, 8, 1} so k = 1
我考虑过中位数,但我不允许更改数组...
由于
答案 0 :(得分:5)
我相信这是您正在寻找的:http://www.cs.utexas.edu/users/moore/best-ideas/mjrty/index.html
基本上,您迭代并维护两个数据:候选人和投票计数。每个元素增加或减少投票计数,具体取决于元素本身是否与候选者匹配。如果投票为0,则元素本身成为候选者。
只要存在多数,在迭代过程结束时,当前候选者将成为多数元素。