Решил, но вопрос почему не дублирует в правильном решение. Пожалуйста, ответьте. Жирным не понятно?!!
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
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 уровень
Доброй ночи. Решил, но вопрос почему не дублирует в правильном решение. Пожалуйста, ответьте.
Обсуждается
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
1 декабря 2021, 23:01
В коде, что у тебя выделено жирным ты делаешь проверку сколько max встречающихся байтов i в файле, дело в том, что таких значений у тебя может быть как одно, так и множество!
Например , у тебя maxCount = 101, 125-й байт встречается 101 раз и 231-й байт встречается 101 раз, значит оба эти значения будут выведены, так как таких значений встречающихся maxCount раз несколько!
+1
БелК в труселях
2 декабря 2021, 12:04
Спасибо. Добрый день Это понятно просто в maxCount по идее будет одно значение, которое постоянно меняется, НО ОДНО! Соответственно и вывод в лист одно значение, а по факту два?
0
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
4 декабря 2021, 18:30
maxCount означает сколько раз у тебя встречается данный байт, предположим что файл вообще у тебя пустой, то соответственно каждый байт у тебя встречается 0 раз и maxCount = 0 и выведено будет все 256 байтов (0..255), а если файл не пустой, то есть вероятность того, что несколько байт в файле могут встречаться одинаковое количество раз, при этом данное значение будет max среди всех значений встречаемости байтов файла!!!
+1
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
4 декабря 2021, 18:31
в maxCount одно значение, но данное значение может встречаться одновременно у несколько байт
+1
БелК в труселях
4 декабря 2021, 18:45
Дмитрий спасибо. Я наверное не правильно написал. Вопрос был в том что например 1 и2 встречаются часто
int maxCount = 0;
for (int byteCount : byteCountArray) {
if (byteCount > maxCount) maxCount = byteCount; -------------------инт maxCount=1 а потом инт maxCount =2 соответственно инт maxCount =1 больше не будет.
}
ArrayList<Integer> resultList = new ArrayList<>();
for (int i = 0; i < byteCountArray.length; i++) {
if (byteCountArray[i] == maxCount) resultList.add(i); а здесь 2 и инт=1 не будет
а по факту и интmaxCount=1 и интmaxCount=2 в листе.
Я понимаю, что это элементарно Ватсон, но я не пойму. Заранее спасибо.
0
Ksenia VolkovaJava Developer в DXCMaster
4 декабря 2021, 19:33полезный
У тебя есть массив чисел.
У каждого элемента массива есть индекс и значение. Это разные вещи.
maxCount - это максимальное значение (это не байт, не '1' или '2', а максимальная встречаемость, т.е. сколько раз встретился самый частый байт). Оно будет одно на весь массив.
Но ячеек, в которых хранится это максимальное значение, может быть много (хоть все).
В список resultList у тебя добавляются именно индексы этих ячеек, а не их значения.
+1
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
4 декабря 2021, 23:25
Возьмем похожую задачу:
Пусть в классе 30 учеников написали контрольную работу по математике. Определить сколько учеников получили наивысший бал, если за контрольную работу они могут получить от 1 до 5 балов.
+3
БелК в труселях
5 декабря 2021, 08:36
Доброе утро. ОГРОМНОЕ ВАМ СПАСИБО ЗА ПРОДЕЛАННЫЙ ТРУД! СТАЛО БОЛЕЕ МЕНЕЕ ПОНЯТНО. ЕЩЕ РАЗ СПАСИБО!!!
0
БелК в труселях
5 декабря 2021, 08:38
Доброе утро Ксения. Как я рад видеть Ваши ответы я уже подумал, что чем то Вас обидел. КАК ВСЕГДА ОГРОМНОЕ СПАСИБО.
0