0
List<Integer> zmagovalci = new ArrayList<Integer>();

if (zmagovalci != null && !zmagovalci.isEmpty()) { 

if (zmagovalci.size() == 1)

{System.out.println("Zmagal je Tekmovalec " + zmagovalci.get(0) + "   " + "("+
stTockZmagovalca + " tock" + ")"); 

此代码返回/打印数组列表中的最大值。我如何打印前三个最大的(降序)?

4

3 回答 3

2

如果您说的是纯 Java,那么您可以像这样实现它

Collections.sort(zmagovalci);
Collections.reverse(zmagovalci);

要打印最大的 3 个数字:

for (int i = 0; i < 3; i++) {
System.out.println(zmagovalci.get(i));
}

编辑

这是我现在使用 Java 8 解决这个问题的方法:

 zmagovalci.stream()
            .sorted(reverseOrder())
            .limit(3)
            .forEach(System.out::println);

Java 8 好多了 :)

于 2013-11-06T20:03:24.223 回答
1

您正在尝试选择最大的 3 个元素。设 n 为列表中的元素数, k 为您要选择的元素数。你可以:

  1. 循环遍历列表并跟踪 3 个最大的元素。仅使用 3 个变量的简单方法不能很好地扩展,但您可以使用堆来概括问题,并具有良好的性能。这在 O(n log k) 中运行。

  2. 按降序对列表进行排序,然后打印前 3 个元素。这通常在 O(n log n + k) 中运行。

  3. 实现选择算法,例如快速选择来选择最大的 3。这涉及更多,但您也可以选择仅打印第 3 大元素,或从第 5 到第 7 等有效地打印。它以 O(nk) 运行。

于 2013-11-06T19:57:34.553 回答
0

对 ArrayList 进行排序,然后获取前 3 个元素。

于 2013-11-06T19:56:28.603 回答