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

007sunchela Знаток (416), открыт 2 недели назад
19. Пользователь задаёт число N (N<100000). Затем вводит N целых чисел (все числа больше 0 и не большие 100). Указать, три каких числа встречаются чаще всего, и сколько раз.
2 ответа
Папа Высший разум (122400) 2 недели назад
Как-то так. Собираем частоты, отбираем элементы с топ тремя частотами.
 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.
007sunchelaЗнаток (416) 2 недели назад
спасибо
007sunchelaЗнаток (416) 2 недели назад
1. Задана последовательность из 366 целых чисел – средняя температура за сутки по дням года. Определить, и вывести на экран, какая температура повторялась наибольшее количество раз.

можете помочь решить еще такую задачку?
Папа Высший разум (122400) 007sunchela, да то же самое. Собираем частоты, только потом ищем не максимальных три частоты, а одну максимальную. Это даже проще.
007sunchelaЗнаток (416) 2 недели назад
на фото верное решение?
Папа Высший разум (122400) 007sunchela, за один проход? В принципе, можно, только в этом решении чисел не 366, диапазон температур странный (поверхность Луны, что ли?), да и хранить всю последовательность температур в массиве не нужно.
007sunchelaЗнаток (416) 2 недели назад
там опечатка. не 20, а 366 должно
Папа Высший разум (122400) 007sunchela, работать будет, хоть и лишние телодвижения есть.
Николай Веселуха Высший разум (360860) 2 недели назад
 import java.util.Map; 
import java.util.HashMap;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
HashMap map = new HashMap();
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.comparingByValue().reversed())
.limit(3).forEach(System.out::println);
}
}
Похожие вопросы