0

私はこのような配列を持っています:

int[] array = { 2, 4, 6, 8, -3, 8, 2, 7, 2, 4 };

どの数字が最も多く表示されているか (この場合はもちろん 2) を知りたいのですが、どうすればそれを行うことができますか?

4

6 に答える 6

2

以下のコードはJava 8でうまくいくと思います。

int[] array = { 2, 4, 6, 8, -3, 8, 2, 7, 2, 4 };
Arrays.stream(array).collect(Collectors.groupingBy(s -> s))
      .forEach((k, v) -> System.out.println(k + ": " + v.size()));

版画:

2: 3
4: 2
8: 2
6: 1
7: 1
-3: 1
于 2014-10-07T23:26:25.410 に答える
0

int をカウントにマッピングするマップを作成できます。Java では、HashMap<Integer, Integer>. リストを調べて、int が既にマップにあるかどうかを確認します。そうであれば、そのカウントに 1 を追加し、そうでなければ 1 に初期化します。その後、マップに戻って、カウントが最大の番号を見つけます。

于 2014-10-07T23:23:32.377 に答える
0

度数分布を作成し、配列を反復処理する必要があります。整数を使用しているため、キーとして直接使用できるため、簡単になります。

HashTable frequencyDistribution = new HashTable();
for(int i=0; i<array.length; i++) {
    int key = array[i];
    if( !frequencyDistribution.containsKey( key ) ) frequencyDistribution.add( key, 0 );
    frequencyDistribution[ key ]++;
}
int modeKey;
int modeCnt = int.MIN;
foreach(int key in frequencyDistribution.keys) {
    int cnt = frequencyDistribution[key];
    if( cnt > modeCnt ) modeKey = key;
}
print("Most frequent is: {0} as it appears {1} times.", modeKey, modeCnt);
于 2014-10-07T23:25:25.353 に答える
0

バケット ソートのバケット フィル ステップを使用してから、すべてのバケットを線形にスキャンして、最も頻繁に表示される数を取得できます (配列内の最大数を取得する方法を知っていますよね?)。基になるデータ構造は配列である必要はありません (これが最も高速です)。キー -> 値メカニズムを持つものなら何でも使用できます。これは、BIG 範囲の場合、メモリの制約により配列を使用できない可能性があるためです。実行時間。

于 2014-10-07T23:26:40.953 に答える