byteCountArray[fileInputStream.read()] += 1;\\ непонятная строчка кода
\\ снизу весь код задачи
public class Solution {
public static void main(String[] args) throws Exception {
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 + " ");
}
}Artur Khristoforov
20 уровень
Ребят, объясните пожалуйста, что делает эта строчка кода? Да и вообще, полную логику решения задачи (если можно). Спасибо.
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ГоффMaster
10 октября 2021, 14:10решение
int[] byteCountArray = new int[256]; - создаётся массив размером в 256 элементов. Почему 256? Потому что байт может принять 256 различный значений (2 в восьмой степени).
Так вот, значение считанного байта - это индекс этого массива. А в самом массиве хранятся количество повторов. То-есть, если значение очередного байта = 56, то мы на единицу увеличим byteCountArray[56].
Строчка byteCountArray[fileInputStream.read()] += 1; увеличивает на 1 значение в массиве с индексом, равным считанному байту.
Потом нам надо просто посмотреть, какой элемент в массивве наибольший - его индекс и будет тот самый байт с наибольшим количеством повторов.
Это решение остроумное, но требует мысленного усилия для понимания - потому что у нас индекс - не просто абстрактный индекс для счёта, а соответствует некоему осмысленному значению - байту.
+14
Artur Khristoforov
10 октября 2021, 15:22
Точно-точно, почему-то сам до этого не додумался, с твоим разъяснением всё встало на свои места) Благодарю тебя.
+2
Aleksey System Engineer
23 ноября 2021, 21:19
Да, весьма любопытное решение с использованием индексов массива)
0
ГоффMaster
5 декабря 2021, 13:56
Особенно любопытно, что таким образом можно не только максимум найти, но и очень быстро отсортировать массив не используя ни сравнения элементов, но вообще какую-либо сортировку как таковую.
0