Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Помочь решить задачу на Java

19. Пользователь задаёт число N (N<100000). Затем вводит N целых чисел (все числа больше 0 и не большие 100). Указать, три каких числа встречаются чаще всего, и сколько раз.

По дате
По рейтингу
Аватар пользователя
Новичок

Как-то так. Собираем частоты, отбираем элементы с топ тремя частотами.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
 import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
        final Scanner in = new Scanner(System.in);
        final int n = in.nextInt();
        final int m = 100;
        final int[] freq = new int[m];
        for (int i = 0; i < n; i++) {
            final int k = in.nextInt();
            freq[k-1]++;
        }
        final int[] maxfk = new int[] { -1, -1, -1 };
        for (int k = 0; k < m; k++) {
            int f = freq[k];
            int c = maxfk[0], j = k;
            if (c < 0) {
                maxfk[0] = k;
                continue;
            }
            if (f > freq[c]) {
                f = freq[c];
                j = maxfk[0];
                maxfk[0] = k;
            }
            c = maxfk[1];
            if (c < 0) {
                maxfk[1] = j;
                continue;
            }
            if (f > freq[c]) {
                f = freq[c];
                final int t = j;
                j = maxfk[1];
                maxfk[1] = t;
            }
            c = maxfk[2];
            if (c < 0) {
                maxfk[2] = j;
                continue;
            }
            if (f > freq[c]) {
                maxfk[2] = j;
            }
        }
        for (int j = 0; j < 3; j++)
            if (maxfk[j] >= 0)
       	        System.out.printf("%d - %d\n", maxfk[j] + 1, freq[maxfk[j]]);
    }
} 

Если во входных данных меньше 3-х различных чисел, то будет выведено, сколько есть (число и его частота в каждой строке, по убыванию частоты). Если с третьей по счёту частотой несколько элементов, то будет выведен наименьший из них. Сами 100 тысяч входных элементов не храним, они являются индексами частот, сдвинутыми на 1.

Аватар пользователя
Высший разум
1234567891011121314151617181920212223
 import java.util.Map; 
import java.util.HashMap; 
import java.util.Scanner; 
 
public class Main { 
    public static void main(String[] args) { 
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); 
        Scanner in = new Scanner(System.in); 
        int n = in.nextInt(); 
        for (int i = 0; i < n; ++i) { 
            int key = in.nextInt(); 
            if (map.containsKey(key)) { 
                int value = map.get(key) + 1; 
                map.put(key, value); 
            } else { 
                map.put(key, 1); 
            } 
        } 
        map.entrySet().stream() 
            .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed()) 
            .limit(3).forEach(System.out::println); 
    } 
}