我有200个排序正整数数组(其中一些数字超过一百万)。我需要找到每个数组中存在的第一个数字。你会建议什么?
答案 0 :(得分:3)
编辑:代码示例:
while n < len(data):
item = data[n][indices[n]]
if item < reference:
indices[n] += 1
elif item == reference:
n += 1
elif item > reference:
reference = item
n = 0
print reference
答案 1 :(得分:1)
您可以在阵列上进行k-way合并,并检查出现k
次的第一个元素。
另一种方法是创建histogram,并选择在直方图中出现k
时间的第一个元素。 java中的直方图可以通过Map<Element,Integer>
两个解决方案都是O(kn)
,其中k
是数组的数量,n
是数组的平均大小,因此它在输入大小上基本上是线性的。