有数百万的整数。如何从中找出n个最大的数字?请注意,由于输入很大,我无法在内存中存储任何内容。
有什么建议吗?
由于 沙格
答案 0 :(得分:4)
您可以遍历所有数字(例如,逐个从媒体中读取它们),并且只保留一个包含10个最大数字的列表。
在伪代码中:
max_numbers = new int[n]
until not end of file:
read number
if number > min(max_numbers):
'copy number to minimum value of max_numbers'
答案 1 :(得分:2)
只有一个包含n个元素的数组,如果你发现一个数字大于数组中的最小数字,你可以改变它。
你可以保留一个额外的变量来保存数组中最小的数字,这样当你知道你必须改变某些东西时你只能迭代它。
答案 2 :(得分:1)
获取一个10长度的数组,当你运行数字时,将最小的数据换成新的更大。
答案 3 :(得分:1)
public void largest() {
int _current, _highest, _lowest;
if(_current >= _highest) {
_highest = _current;
} else if(_current <= _lowest) {
_lowest = _current;
}
}
我会做什么。
答案 4 :(得分:1)
保持Max-Heap大小n
。
答案 5 :(得分:-1)
<强> EDITED 强>
我建议形成一个优先级队列(基于堆),迈克尔的建议是合乎逻辑的结论。 不要存储10,存储n。
PQ a[n];
a.insert(input);
O(log n)
FTW