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

  • 20
  • Недоступна
Ввести с консоли имя файла. Найти байт или байты с максимальным количеством повторов. Вывести их на экран через пробел. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (555)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Никита
Уровень 25, Gdańsk, Poland
18 мая, 19:59
Решил через HashMap. Задачка интересная и совсем не сложная.
Khaweez
Уровень 28, Woodbridge, France
позавчера, 20:02
Скажите пожалуйста, а что вы с мапой дальше делалаи? Я из нее делал ArrayList<Map.entry<Integer, Integer>>, чтобы отсортирвать. Решение рабочее, но какое-то костыльное.
Anonymous #2566694 Backend Developer
10 мая, 19:36
очередная по уродски поставленная задача спасибо new Cat("Barsik") Сызрань, Россия и его сообщению ниже { Для таких как я. • В консоль через пробел должны выводиться все байты из файла с максимальным количеством повторов. Это означает что если байт "51" содержится в файле 10 раз(и это самое большое количество раз в сравнении с другими байтами) и байт "53" содержится в файле 10 раз то в консоли у нас выводится "51 53". }
Vladimir
Уровень 29, Москва, Russian Federation
1 июня, 12:42
Спасибо тебе, добрый человек. Я тоже не понял что требуется.
Igor
Уровень 20, Киев, Ukraine
10 мая, 06:49
Сама задача не сложная, но вот с понимаем неоднозначно постановленного условия задачи в который раз возникают сложности. Пришлось перечитать все комменты чтобы понять что требуется вывести. В консоль нужно вывести байт с максимальным количеством повторений в файле. А если таких байтов несколько, то вывести все байты в консоль.
Igor Petrashevsky
Уровень 35
13 мая, 02:10
спасибо, помогло
Edward Northwind
Уровень 20, Мариуполь, Украина
6 мая, 14:18
Посмотрел - ваш вариант интересней))) Я же решил через HashMap. Хотя у обоих вариантов количество циклов одинаково, ваш выглядит компактнее и элегантнее.
Anonymous #3036451
Уровень 27, Falls Church, United States
6 мая, 08:24
Довольно интересное правильное решение. Подсказка: байтов может быть только 256. P. S. делал через 2 ArrayList. Валидатор принял решение.
Matveybor bor
Уровень 36, Москва, Russian Federation
27 марта, 19:25
Подскажите, а можно эту задачу решить через "количество вхождений" определенного байта ?
milyasow
Уровень 30, Москва, Russian Federation
31 мая, 21:06
В правильном решении именно так и делается.
Евгений
Уровень 36, Москва
23 марта, 11:58
Пригодился метод Collections.frequency();
CyberBoar
Уровень 36, Russian Federation
21 марта, 08:03
Решил разделить задачу, решая её через 3 приватных метода. Первый считывает с консоли и возвращает введённую строку. Второй возвращает мапу, где ключ - это байт, который встретился в файле, а значение - сколько раз он встретился. Третий метод возвращает множество(Set), в котором перечислены байты, которые встретились наибольшее число раз. Решил сделать так, а не через массив, что бы было легче делать следующие задачи - код практически не нужно будет менять.
Павел К
Уровень 25, Гомель, Belarus
20 апреля, 12:28
я сделал тоже самое, но без отдельных методов, а потом долго соображал что же намудрили в правильном решении
Hugon
Уровень 29, Москва, Россия
18 марта, 12:23
КОД ИЗ ПРАВИЛЬНОГО РЕШЕНИЯ:
byteCountArray[fileInputStream.read()] += 1;
почему в индекс записываем считанные байты и в каждом индексе хранится число +1? не понимаю вообще, подскажите, пожалуйста.. зачем так усложнять..
Олег Мартынов
Уровень 30, Москва, Россия
20 марта, 15:08
1. Первоначально мы создали массив со всеми байтами, их всего может быть от 0 до 256: int[] byteCountArray = new int[256]; 2. Дальше мы получаем номер ячейки этого массива, равный считанному байту: fileInputStream.read() // например, 112 или 233 3. Получаем соответствующую данному байту ячейку из массива: byteCountArray[112] или byteCountArray[233] // в соответствии с примером из п.2 4. И добавляем к значению ячейки (которое в начале равно нулю) единицу, т.е. просто считаем сколько раз нам встретился данный байт: byteCountArray[112] = byteCountArray[112] + 1 // аналог операции - += 1 Другими словами, данная формула (byteCountArray[fileInputStream.read()] += 1;) подсчитывает сколько раз нам встречается в файле тот или иной байт
Hugon
Уровень 29, Москва, Россия
21 марта, 06:51
Cпасибо))
Олег
Уровень 32, Москва, Russian Federation
5 мая, 11:06
звиздец, как до такого вобще додуматься можно было...
Евгений
Уровень 24, Санкт-Петербург, Russian Federation
16 марта, 13:30
10 попыток, 3 раза переписан код, и тупо не проходил проверку потому, что 2 раза написал вывод в консоль в общем 2 лишних часа убил на задачу, т.к. еще за разными компами работаю и если делаешь в идее, то потом в веб версии нет кода, и наоборот...
milyasow
Уровень 30, Москва, Russian Federation
31 мая, 21:09
В веб-версию достаточно просто скопировать код, чтобы он сохранился. Ну или отправить на валидацию из IDEA, тогда он точно сохранится на сервере.