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

  • 10
  • Недоступна
Ввести с консоли имя файла. Найти байт или байты с максимальным количеством повторов. Вывести их на экран через пробел. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (170)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Павел19 уровень
9 июня, 09:55
Ох, пришлось вспомнить HashMap и повозиться. Создаем HashMap<Integer, Integer> куда заносим к качестве ключа байт, в качестве значения - количество его повторений. Делаем, естественное, через цикл с проверкой на наличие ключа. Если ключ уже имеется - увеличиваем значение на единицу. Таким образом получаем максимальное значение. В другом цикле ищем все ключи с максимальным значением и выводим их через пробел. Валик написал что решил лучше чем 59%
Максим20 уровень, Киев
20 мая, 07:35
Интересно... Закрыл потоки после вывода в консоль (как в условии и написано). Ругалось на последний пункт. Перенес закрытие до вывода - все прошло...
Андрей Кутиль19 уровень, Киев
14 июня, 12:18
У меня тоже прикол с этим был, написал закрытие в конце кода, не пропускает валидатор, написал закрытие сразу после того как он отработал, прошло... Видимо нужно закрывать как можно раньше если не нужен поток.
MrKermit20 уровень, Москва
16 апреля, 07:01
Кто тз писал, я не понимаю что от меня хотят... Найти байт с максимальным кол-вом повторений и вывести все байты с идентичным кол-вом повторений? Что мешает писать тз по человечески? Может можно было бы еще пример запихнуть? Сложность не в решении а в понимании того что вообще от тебя требуется...
Андрей Кутиль19 уровень, Киев
14 июня, 12:19
...в этой жизни)
Пётр41 уровень, Москва
14 апреля, 09:04
Через ArrayList слишком просто - занес значения, отсортировал коллекцией и посчитал первое количество максимальных повторений. Потом проверил второе количество столько же или меньше. Потому, делал через мапу - инициализировал ключами от 0 до 255, значениями 0. При считывании байта увеличивал в мапе значение на 1 у ключа. Потом нашел максимальный ключ и вывел все значения, у которых ключ максимален)
Арсений22 уровень, Санкт-Петербург
31 мая, 19:12
Зачем инициализировать Map ? можно добавлять байты(ключи) по мере обнаружения и сразу чекать есть такой, тогда ++ иначе, 1
Павел19 уровень, Санкт-Петербург
5 июня, 11:55
все равно ничего не понятно
Павел19 уровень
9 июня, 09:52
Но тогда мы получим просто максимальное значение. А если у нас есть байты у которых максимальное количество повторений совпадает? Например, байт 32 повторяется 150 раз и байт 98 повторяется 150 раз? Тогда программа выведет или 32, или 98. По условию же необходимо найти "байт или байты с максимальным количеством повторов".
Арсений22 уровень, Санкт-Петербург
суббота, 11:11
прогоняем полученный массив на предмет максимального члена, выводим все члены которые равны максимальному. Map это конечно хорошо, но надо уметь и без map.
Maxim Moskalyuk22 уровень, Санкт-Петербург
9 апреля, 22:05
Печально, что не смог додуматься как решить задачу, поддался соблазну и посмотрел комменты
Алексей Кравчук22 уровень, Минск
3 апреля, 17:07
я как всегда забываю закрыть поток...
Harry22 уровень, Москва
21 марта, 20:21
Если кому интересно, то подобные задачи удобно решать через массив-словарь. Поскольку у нас считываются байты, то максимальный размер байта - 255 (или 0xFF если удобнее). Когда считываем символ, то считанное значение (например ASCII код 1(единицы) - 49), следовательно увеличиваем значение массива по индексу 49 на 1. Например так : InArray [ inStream.read() ]++; В итоге по окончанию чтения файла получаем массив InArray длинной 255, а в соответствующих ячейках будет лежать количество считанных символов : InArray[ ASCII_код_символа ] = сколько раз такой символ встретился. InArray[49] = 4 , что значит символ "1" встретился 4 раза. Можно конечно всякие Map'ы использовать, но так интереснее=) да и иметь дело с итоговым массивом просто.
Radiokate25 уровень
15 мая, 17:46
Эта задача у меня уже через Map (до прочтения комментов, лень переделывать). Но в следующих двух задачах массив-словарь зашел шикарно: очень элегантный способ решения, спасибо за совет
Ринат18 уровень
4 июня, 14:06
Гениально!!! Скажи честно сам догадался или где то взял?
Ярослав Неило20 уровень, Киев
13 июня, 08:33
А подробнее можно про ваш метод? или ссылку на статью или пример кода, не могу понять как он работает. Спасибо
Lyudmila Grayvoronskaya19 уровень, Одесса
14 марта, 20:03
У меня была ошибка так же на внимательность :))) Я выводила символ/ы которые повторяются - а нужно БАЙТ! И того 5 попыток! Я пар раз переделывала реализацию - и все не могла понять что не так, количество и символы правильные :)))
Andrey P19 уровень, Новосибирск
3 марта, 18:49
Поставил stream.close(); в самом конце - не принимало. Оказалось, что сразу после цикла надо ставить.
Николай Захаров23 уровень, Москва
21 марта, 08:02
У меня в самом конце, и все приняло нормально
Никита22 уровень, Москва
22 февраля, 05:57
Если закрыть поток чтения после вывода ответа на экран, то валидацию не проходит :\