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" + ")"); 

このコードは、配列リストから最大の値を返す/出力します。最初の 3 つの最大値 (降順) を印刷するにはどうすればよいですか?

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 を選択するために、 quickselectなどの選択アルゴリズムを実装します。これはより複雑ですが、3 番目に大きい要素のみ、または 5 番目から 7 番目までなどを効率的に出力するように選択することもできます。O(nk)で動作します。

于 2013-11-06T19:57:34.553 に答える
0

ArrayList をソートし、最初の 3 つの要素を取得します。

于 2013-11-06T19:56:28.603 に答える