не могу понять как работает правильное решение
я тут значит через мапы все прогоняю нахожу сколько одинаковых элементов, сортирую и по максимальному значению еще ищу может есть с таким же количеством, А У НИХ ЧЕРЕЗ МАССИВ ПРОСТО ВСЕ РЕШАЕТСЯ И НЕ ПОЙМУ КАК ЭТО РАБОТАЕТ!?
все дело в методе чтоли или где происходит счет одинаковых байтов? все циклы вроде ищут максимальный байт и все
ниже мой кусок и кусок правильного
Map<Integer, Integer> result = new HashMap();
for (Integer x : integers) {
if (result.containsKey(x)) {
result.put(x, result.get(x) + 1);
} else {
result.put(x, 1);
}
}
int maxValueMap = Collections.max(result.values());
for (Map.Entry<Integer, Integer> map : result.entrySet()) {
if (map.getValue() == maxValueMap) {
System.out.print(map.getKey() + " ");
___________________________________________________________--
int[] byteCountArray = new int[256];
try (FileInputStream fileInputStream = new FileInputStream(fileName)) {
while (fileInputStream.available() > 0) {
byteCountArray[fileInputStream.read()] += 1;
}
}
int maxCount = 0;
for (int byteCount : byteCountArray) {
if (byteCount > maxCount) maxCount = byteCount;
}
ArrayList<Integer> resultList = new ArrayList<>();
for (int i = 0; i < byteCountArray.length; i++) {
if (byteCountArray[i] == maxCount) resultList.add(i);
}
for (Integer resultItem : resultList) System.out.print(resultItem + " ");
}
}
Сергей Ильин
35 уровень
В чем логика правильного решения
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергей
26 ноября 2023, 18:18
откуда там массив на 256 элементов? я не могу понять. откуда вдруг такое решение?
0
hidden #3303140
26 ноября 2023, 18:54
Метод read() возвращает прочитанный байт, число от 0 до 255, или -1, если байт не был прочитан. Если использовать этот байт в качестве индекса массива, то в значении можно хранить количество, сколько раз этот байт был прочитан.
+1
Денис Enterprise Java Developer
26 ноября 2023, 20:27
Он не байт возвращает, а integer представление байта в беззнаковом виде. Именно то, что все значения больше или равны нулю позволяет использовать массив integer чисел, где индексом является значение считанного байта, а значением в массиве - количество вхождений этого байта в файл. Если бы read возвращаль именно byte, так сделать не получилось бы, массивы с отрицательными индексами в java не представлены :)
-1 возвращается когда поток вычитан до конца. Это не тоже самое, что байт не прочитан.
Это кстати причина почему используется именно беззнаковое значение байта, отрицательное число это очень удобный флаг окончания чтения, и можно не забивать себе голову дополнительными механизмами индикации.
+1
hidden #3303140
26 ноября 2023, 22:03
Имел в виду именно беззнаковый байт, т.е число [0-255], но это потерялось где-то между строк. Спасибо, что исправил.
0
Gans Electro
17 апреля 2023, 04:15
Байт имеет диапазон в [-128, 127]. Это путает. Дело в том что fileInputStream.read() возвращает не byte а int. И он имеет уже другой диапазон конкретно здесь он возвращает [0, 255]. При чтений символов же он уже читает в диапазоне ~64К и сужается до char. Но к тому же он еще выполняет роль маркера возвращая -1 когда не смог прочитать ничего.
0
Сергей Ильин президент
25 августа 2022, 14:12
блин дотукал, прикольное решение, там ж массив на 256 элементов)))) и просто увеличивают нужный байт и выводят потом номера элементов)))
все гениальное просто.....
+6