【问题标题】:Finding constant that appears in more than half of an array's elements [duplicate]查找出现在数组元素中超过一半的常量[重复]
【发布时间】:2023-03-19 09:46:01
【问题描述】:

有一个整数数组,他的长度是n。在他的一半以上的元素中有一个未知的常量k。 你不能改变数组(他是read-only),你只有O(1)大小的内存。 你需要找到最复杂的k(你认为你可以得到低于O(n)?)

示例:

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

我想过使用中位数,但我不允许更改数组...

谢谢

【问题讨论】:

标签: c arrays algorithm


【解决方案1】:

我相信这就是你要找的东西:http://www.cs.utexas.edu/users/moore/best-ideas/mjrty/index.html

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多