我有 200 个排序的正整数数组(其中一些有超过一百万个数字)。我需要找到每个数组中存在的第一个数字。你有什么建议?
问问题
129 次
2 回答
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
于 2012-07-17T11:39:52.850 回答
1
您可以对数组进行 k 路合并并检查出现k
次数的第一个元素。
另一种方法是创建一个直方图,并选择直方图中出现k
时间的第一个元素。java中的直方图可以通过以下方式轻松实现Map<Element,Integer>
两种解决方案都是数组O(kn)
的k
数量和数组n
的平均大小,因此它在输入的大小上基本上是线性的。
于 2012-07-17T11:39:10.730 回答