В помощи видел решения через коллекции. Но не совсем понимаю, почему нужно использовать именно коллекции.
Мой принцип заключается в том, что байты добавляем в ArrayList после проверки, что такие байты еще не были добавлены в этот массив. Предполагается, что минимальное количество повторений будет "1" и, следовательно, все байты, встречающиеся один раз, и будут являться самыми редкими.
package com.javarush.task.task18.task1804;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Самые редкие байты
*/
public class Solution {
public static void main(String[] args) throws Exception {
ArrayList<Integer> myArray = new ArrayList<>();
int newByte = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine();
try (FileInputStream fileInput = new FileInputStream(name)) {
myArray.add(fileInput.read());
while (fileInput.available() > 0) {
newByte = fileInput.read();
for (Integer a : myArray) {
if (newByte != a) {
myArray.add(newByte);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
for (Integer a : myArray) {
System.out.print(a + " ");
}
}
}