在未排序的数组中查找重复k次的数字

时间:2013-02-15 14:45:59

标签: algorithm bit-manipulation

我们有包含整数的数组,我想找到在这个数组中重复k次的数字。数组未排序,数字不受限制。

示例,

A(20,6,99,3,6,2,1,11,41,31,99,6,7,8,99,10,99,6)

查找重复次数超过3次的数字。

答案:6,99

使用逐位运算(xor)或组合的可能答案?运行时间的效率需要Big(o)以及空间容量。

这不是功课,它只是一个有趣的问题。

1 个答案:

答案 0 :(得分:0)

帕特里克87可能在评论中有最​​直接的答案,所以我会给出另一种方法。

当你遍历列表时,你将创建一个元素(id,value)并在其中插入一个元素(id,value),其中id等于数字,并且值与插入时初始化为1的计数相匹配。如果该值已经存在于地图中,则只需递增计数器。

插入地图将需要O(log k)时间,其中k是地图的大小。因此,您的总地图创建时间为O(n log n)。

创建地图后,您可以迭代它,并输出count == target count的任何数字。

时间复杂度= O(n)+ O(n log n)+ O(n)= O(n log n) 空间复杂度= O(n)+ O(n)= O(n)

如果您正在寻找更好的空间复杂性,那么您将无法获得它...即使从流中读取数字,您也需要跟踪单个值O(n)