Да все немного громоздко, но вроде правильно выводит. Что поправить нужно?
package com.javarush.task.task18.task1804;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
/*
Самые редкие байты
*/
public class Solution {
public static void main(String[] args) throws Exception {
try (BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
FileInputStream reader = new FileInputStream(console.readLine())) {
ArrayList<Integer> dataList = new ArrayList<>();
while (reader.available() > 0) {
dataList.add(reader.read());
}
ArrayList<Integer> dataListCopy = new ArrayList<>(dataList.size());
ArrayList<Integer> outputList = new ArrayList<>(dataList.size());
for (Integer value : dataList) {
dataListCopy.add(value);
outputList.add(value);
}
int minFrequency = Integer.MAX_VALUE;
for (int a = 0; a < dataList.size(); a++) {
int frequency = Collections.frequency(dataListCopy, dataList.get(a));
if (frequency < minFrequency) {
minFrequency = frequency;
}
if (frequency > minFrequency) {
outputList.set(a, 0);
}
}
if (Collections.frequency(dataListCopy, dataList.get(0)) > minFrequency) {
outputList.set(0, 0);
}
for (Integer number : outputList){
if (number != 0){
System.out.print(number + " ");
}
}
}
}
}