我们有包含整数的数组,我想找到在这个数组中重复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)以及空间容量。
这不是功课,它只是一个有趣的问题。
答案 0 :(得分:0)
当你遍历列表时,你将创建一个元素(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)