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

  • 20
  • Недоступна
Ввести с консоли имя файла. Найти байт или байты с максимальным количеством повторов. Вывести их на экран через пробел. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (632)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Vertumn-tumn
Уровень 18
4 февраля, 04:42
for (Object i : list) { int frequency = Collections.frequency(list, (Integer) i); if (frequency > maxFreq) { maxFreq = frequency; index = list.indexOf(i); } коллекции в помощь
Vladislava
Уровень 28
24 января, 12:40
Просидела два часа. Решила. В итоге "Не найден метод "readAllBytes()" в переменной "fileInputStream"" при валидации. Жаль
Lafaed
Уровень 25
20 января, 21:36
Условие задачи : "Найти байт или байты с максимальным количеством повторов." Овет валидатора (ошибка) : "Не нужно несколько раз выводить один и тот же байт." Да блин - сказано же БАЙТ или БАЙТЫ ! Тоесть их может быть несколько - я так и написал код который выводит все байтЫ с максимальным повтором ! Плюс еще file.readAllBytes() отлично работает в Intellij но при валидации говорит нет метода readAllBytes() у file ! В итоге вроде "выдумал" своё решение, всё казалось бы работает, но валидатор не хавает потому что долго думает. Ложил на задачу решебник ! P.S. Мудаки, своё решение в браузере отправляет в Intellij , зато решебник в браузере аж бегом принимается.
StrangeAngel
Уровень 27
19 января, 19:39
Задача жесть просто. С этими мапами мы почти не работали, нашёл решение в интернетах. Весь вечер потратил. Посмотрел правильное решение и обомлел. Ну это хитро ребята. Символов 256, как я сам не догадался? А я начинал решать так же, но пришёл в тупик. Нуб ещё походу просто.
13 января, 13:15
Способ, приведенный в верном решении для файла размером 2243 кб выполняется в 78,4 раза медленнее (для файла размером 12356 кб - в 109,6 раз медленнее), чем при использовании HashMap и Stream API.
SVCH
Уровень 39
4 января, 19:41
Снова заморачиваюсь со строгим соблюдением условия "вывести через пробел", а не "пробел послк каждого значения" - разница в том, что после последнего пробела быть не должно... Решил так:
String result = bytesMap.keySet().stream()
        .filter(i -> bytesMap.get(i) == max)
        .map(i -> String.valueOf(i))
        .collect(Collectors.joining(" "));
System.out.println(result);
Alexander Komlichenko
Уровень 37
25 декабря 2022, 15:07
HashMap<Integer, Integer> map = new HashMap<>();
        try(Scanner sc = new Scanner(System.in);
            FileInputStream fis = new FileInputStream(sc.nextLine())){
            while (fis.available()>0){
                int num = fis.read();
                if(map.keySet().contains(num)) map.put(num, map.get(num)+1);
                else map.put(num,1);
            }
            int i = map.values().stream().max(Integer::compare).get();
            map.entrySet().stream().
                    filter(s-> s.getValue()==i).
                    forEach(s -> System.out.print(s.getKey()+ " "));
        }
Cтараюсь приучить себя к стримам\лямбдам\try-with-sourse =)
Vkt Pra
Уровень 25
30 декабря 2022, 08:23
Потратил 2 часа, как мог вылизал и как мог интегрировал стримы\лямбды\try-with-sourse это того стоило, гуглил, гуглил, гуглил інтересно было глянуть как у другіх реалізована фільтрація фінальная, думал сделать как ты по началу но чёт увело в сторону
List<Integer> words = new ArrayList<>();
       HashMap<Integer, Integer> map = new HashMap<>();

       try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));FileInputStream fileInputStream = new FileInputStream(bufferedReader.readLine())) {
           while (fileInputStream.available() > 0) {
               words.add(fileInputStream.read());
           }
       }
       words.forEach(word -> {
           map.putIfAbsent(word, 0);
           map.put(word, map.get(word) + 1);
       });

       map.entrySet()
               .stream()
               .filter(s -> s.getValue() > (Collections.max(map.values()) - 1))
               .forEach(s -> System.out.print(s.getKey() + " "));
SVCH
Уровень 39
4 января, 19:35
Еще можно вместо
int num = fis.read();
if(map.keySet().contains(num)) map.put(num, map.get(num)+1);
                else map.put(num,1);
использовать
map.merge(fis.read(),1,(i1, i2) -> i1 + i2);
Ra
Уровень 36
Student
23 декабря 2022, 06:35
По моему к документации в идеале должны быть примеры. С ними отпадает множество вопросов. Пример к этой задаче: У нас в файле есть байты. Каждый байт имеет значение от 0 до 255. Он может повторяться в файле несколько раз. Например, байт со значением 100 повторился 10 раз, байт со значением 199 повторился 100 раз. Надо посчитать, сколько раз встречался каждый байт от 0 до 255 и у каких байт макс количество повторов. Например, у нас это байты 25, 44, 79, они встречались максимальное кол-во раз. Выводим текст "25 44 79". Из этого примера, например гораздо яснее, что не надо сохранять поток и выводить байты так, как они нам встречаются в файле.
Andrey Dudin
Уровень 37
8 декабря 2022, 16:10
/* Комментарий удален */
Иван
Уровень 36
13 декабря 2022, 15:18
Alexey
Уровень 19
27 ноября 2022, 16:21
15 минут на решение через HashMap и полчаса на осмысление правильного решения) Что ж, возьмем на вооружение:)
Серега Батенин
Уровень 34
28 ноября 2022, 19:41
была мысля сделать также как указано в правильном решение. Возможно в рамках именно этой задачи где известно точное максимальное количество элементов и оно в принципе не такое большое, можно было сделать как и у них)) Но в итоге решил сделать тоже через мапу)
Daniel CEO в BicycleInventionAcad
15 декабря 2022, 02:47
15 минут на разобраться с HashMap и полчаса на офигевание от простоты предложенного решения)