package com.javarush.task.task18.task1804;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
reader.close();
FileInputStream fileInputStream = new FileInputStream(s);
//ìàññèâ îïðåäåëèëè
byte[] list = new byte[256];
byte a;
//çàíîñèì äàííûå â ìàññèâ
while (fileInputStream.available() > 0) {
a = (byte) fileInputStream.read();
list[a] += 1;
}//îïðåäåëÿåì ãäå åñòü ïîâòîðÿþùèåñÿ áàéòû è çàíîñèì â list1
/* for (int x : list
) {
System.out.print(x+" ");
}*/
fileInputStream.close();
Map<Integer, Byte> list1 = new HashMap<Integer, Byte>();
// ArrayList<Byte> list1 = new ArrayList<>();
int min = 2; // 2 3 2
for (int i = 0; i < list.length; i++) { //25 26 27
if (list[i] < min) {
continue;
} else if (list[i] >= min) {
list1.put(i, list[i]);
}
}
// System.out.println(list1);
/* for (int x : list1
) {
System.out.print(x+"- ");
}*/
////îïðåäåëÿåì íàèáîëåå ðåäêî âñòðå÷àþùèåñÿ è çàíîñèì â ëèñò2
ArrayList<Byte> list2 = new ArrayList<>();
int min1 = 256;
Iterator<Map.Entry<Integer, Byte>> iterator = list1.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<Integer, Byte> pair = iterator.next();
Integer key = pair.getKey(); //êëþ÷
Byte value = pair.getValue();
if (key < min) {
min1 = key;
list2.clear();
list2.add(value);
} else if (key > min1) {
continue;
} else if (key == min1) {
list2.add(value);
}
}
/* list2.add(list1.get(0));
for (byte i = 1; i < list1.size(); i++) {
if (list1.get(i) < min1) {
min1 = list1.get(i);
list2.clear(); // 322561
list2.add(list1.get(i));
} else if (list1.get(i) > min1) {
continue;
} else if (list1.get(i) == min1) {
list2.add(i);
}
}// âûâîäèì íà*/
for (int x : list2
) {
System.out.print(x + " ");
}
fileInputStream.close();
}
}
(byte)fileInputStream.read(); list[a] += 1; Из за приведения к byte может произойти переполнение и вы обратитесь к отрицательному индексу. 3. int min = 2; Откуда взялась цифра 2? 4. Map<Integer, Byte> list1 = new HashMap<Integer, Byte>(); list1.put(i, list[i] - а если кол-во этого байта больше 127?); Вам не нужно перекладывать байты из массива в мап, чтобы переложить их в список. Найдите минимальное значение в массиве и выведите все байты у кого совпадает минимальное кол-во, все остальное лишнее