找到n个最高数字

时间:2012-02-13 13:17:01

标签: java

有数百万的整数。如何从中找出n个最大的数字?请注意,由于输入很大,我无法在内存中存储任何内容。

有什么建议吗?

由于 沙格

6 个答案:

答案 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