Самые частые байты

  • 20
  • Недоступна
Ввести с консоли имя файла. Найти байт или байты с максимальным количеством повторов. Вывести их на экран через пробел. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (486)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Игорь Евгеньевич
Уровень 28, Хабаровск, Россия
undefined, 07:32
Отличная задача. Больше суток решал. Пока решал перечитал кучу лекций из прошлых материалов и не только.
Екатерина
Уровень 28, Москва
14 октября, 09:52
решила через HashMap... из комментов ничего не поняла, у половины то, что еще не проходили) данное на сайте решение попроще конечно, чем через HashMap, но зато повторила и попрактиковалась в них))
Мальков Александр
Уровень 18, Уфа, Россия
11 октября, 15:10
Сначала решал через ArrayList статический - не проходит. Пыхтел-пыхтел - ну не проходит никак. Полез в комменты - тот же алгоритм, как и у меня. Плюнул, написал решение через массив, внесенный в main. Результат программы одинаковый, так как алгоритм не менял. Но валидацию прошел. Подозреваю валидатор.. фрай.jpg
Evgeny Gulak Работает в Вконтакте
22 сентября, 21:51
Ушло на решения около 2 часов. В итоге через Мапу решил перегуглив несколько форумов. Хорошая задача.
Erik
Уровень 41
19 сентября, 05:18
Collections.frequency решает все вопросы
Виноградина
Уровень 41, Berkeley, United States
13 сентября, 22:36
хотите увидеть самое жуткое решение на свете😀 сначала читаю все в мапу где ключи это байты а значения их частота а потом если использовать потоки коллекций то ... Внимание спойлер для сравнения решение через коллекции получилось в два раза короче во всяком случае по строкам
Валерий Developer
11 сентября, 16:11
Идея, которую я реализовал: - Использовать Map, у которой key - значение байта, value - количество его повторений; - При чтении байтов из файла обновлять частоту в Map. Я это сделал в одну строчку с использованием метода GetOrDefault: bytesFrequency.put(curByte, bytesFrequency.getOrDefault(curByte, 0) + 1); - Одновременно, сохранять в отдельной переменной максимальную частоту. - Использовать List с самыми частыми байтами. Это позволяет исбежать последующих обходов Map. - Если при считывании очередного байта его частота равна максимальной, то значение этого байта добавляется в List из предыдущего пункта. Если частота больше, то List очищается перед добавлением текущего байта. - После завершения чтения файла в List будут содержаться все байты с максимальной частотой и достаточно вывести их в цикле. Такое решение имеет сложность O(n+m), где n - количество байт в файле (первый цикл) и m - количество байт с максимальной частотой (второй цикл).
Игорь
Уровень 27, Москва , Россия
7 сентября, 11:14
Какая то жесткая не последовательность. Хотя даже здесь задачи понятные, по сравнению с тем что на 16 уровне, синтаксис про из за чего пытаюсь разобраться что там вообще имелось в виду.😬
ScalesRZN Закладчик
6 сентября, 00:54
Постановка кривая. Интерпретируется неоднозначно. Первое, что лезет в голову : "Выведи все байты и их максимальное кол-во повторов в файле через пробел".
Maksim Tatarintsev
Уровень 30, Москва
31 августа, 07:13
Небольшой секрет про эту задачу: "3. В консоль через пробел должны выводиться все байты из файла с максимальным количеством повторов." - "максимальное количество повторов" это любой байт, встречающийся больше 2 раз. Внимание СПОЙЛЕР(решение в 8 строк без коллекций):
Dmitry
Уровень 18, Киев
6 сентября, 12:05
немного не понятно почему при выводе используется условие if(min[i] >2... почему именно 2?
Maksim Tatarintsev
Уровень 30, Москва
12 сентября, 08:05
"максимальное количество повторов" это любой байт, встречающийся больше 2 раз(особенность задачи, я про это и описал выше).
George
Уровень 32, Москва, Россия
16 сентября, 13:30
Мне очень понравилось ваше решение своей лаконичностью, но все-таки интересует момент, что если валидатор бы не пропустил решение, что: "максимальное количество повторов" это любой байт, встречающийся больше 2 раз А действительно надо вывести максимальное количество повторов? например, какой-то элемент повторили 50 раз, это наибольшее количество повторений, его и надо вывести. Как можно изменить ваш код, чтоб оно сработало по этой логике?
Maksim Tatarintsev
Уровень 30, Москва
17 сентября, 17:35
ну здесь получается мы берем элементы, которые встретились больше 2х раз, а для вашего условия получается достаточно всего лишь вывести просто максимальный элемент массива(максимальный элемент, то есть максимальное число повторов)
Тимур Акматов
Уровень 18, Бишкек, Кыргызстан
26 сентября, 19:26
Гениальное решение!!! у меня получилось решить только тремя эррейлистами и двумя циклами
Zheleznyak Maxim
Уровень 28, Moscow, Россия
13 октября, 14:05
Это не решение, а херня. ты просто выводишь то что больше 2х.
Игорь Евгеньевич
Уровень 28, Хабаровск, Россия
undefined, 07:38
В таком случае всегда можно в полях ввести общую переменную которая будет хранить максимальное число повторов. Обновлять в цикле, а потом вывести в консоль только то что встречается максимальное количество раз.