如何和大量的数字数组?

时间:2012-07-17 11:35:45

标签: java design-patterns data-structures

我有200个排序正整数数组(其中一些数字超过一百万)。我需要找到每个数组中存在的第一个数字。你会建议什么?

2 个答案:

答案 0 :(得分:3)

  • 在每个阵列上保留一个索引。
  • 从第一个数组的第一个数字开始作为参考。
  • 第n个数组的第一个数字是否低于引用数,增加其索引。
  • 第n个数组的第一个数字是否等于引用,增加n并继续 - 下一个数组。
  • 第n个数组的第一个数字是否高于参考数字,使用该数字作为参考并重新开始。
  • 如果n == 201,则您的引用存在于每个数组中。

编辑:代码示例:

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是数组的平均大小,因此它在输入大小上基本上是线性的。