Ниже приведен код моего решения. Принципиально я его не менял, по крайней мере 3 последних попытки я просто комментил/раскоментил свое решение и предлагаемое авторами. Результаты работы этих решений одинаковы, однако валидатор не принимал моего решения по третьему пункту (В консоль через пробел должны выводиться все байты из файла с минимальным количеством повторов.)
И вот на последней попытке Валидатор засчитал мое решение как правильное! Я ничего не менял. Как это понять?
public class Solution {
public static void main(String[] args) throws Exception {
int min = Integer.MAX_VALUE;
int[] byteCounts = new int[256];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
try (FileInputStream inputStream = new FileInputStream(fileName)) {
while (inputStream.available() > 0) byteCounts[inputStream.read()] += 1;
} catch (IOException e) {
System.out.println("Файл не прочесть. " + e);
}
for (int byteCount : byteCounts) if (byteCount > 0 && byteCount < min) min = byteCount;
for (int i = 0; i < byteCounts.length; i++) {
if (byteCounts[i] == min) System.out.print(i + " ");
}
// 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 minCount = Integer.MAX_VALUE;
// for (int byteCount : byteCountArray) {
// if (byteCount > 0 && byteCount < minCount) minCount = byteCount;
// }
// ArrayList<Integer> resultList = new ArrayList<>();
// for (int i = 0; i < byteCountArray.length; i++) {
// if (byteCountArray[i] == minCount) resultList.add(i);
// }
// for (Integer resultItem : resultList) System.out.print(resultItem + " ");
}
}