Сортировка байт

  • 10
  • Недоступна
Ввести с консоли имя файла. Считать все байты из файла. Не учитывая повторений - отсортировать их по байт-коду в возрастающем порядке. Вывести на экран. Закрыть поток ввода-вывода. Пример байт входного файла: 44 83 44 Пример вывода: 44 83
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (114)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Yerzhan19 уровень
5 июля, 05:49
сделал через ArrayList, затем пошел в комменты, большинство сделали через TreeSet, единицы через байтмассив. Решил проверить на скорость и байтмассив быстрее, а мой способ самый тяжелый к сожалению оказался. проверял на файле txt размером 92 Кб Байтмассив: 474 - 490 милисекунд TreeSet: 492 - 501 милисекунд ArrayList: 1098 - 1135 милисекунд проверка конечно относительна, но все равно можно сделать вывыод, что байтмассив для данной задачи наиболее подходящий вариант
10 июля, 06:10
Не знаю, как ты проверял, но у меня получилось, что ArrayList по крайней мере быстрее TreeSet (~800мс против ~1000мс) Возможно ты засекал еще время на ввод файла. Либо ты неэффективно сделал работу с ArrayList (Я сделал через contains и binarySearch).
Ярослав Неило20 уровень, Киев
13 июня, 10:15
Реализовал и выборку и сортировку используя только TreeSet. TreeSet - это только уникальные значения в порядке от меньшего к большему. Боялся, что валидатор не примет такое решение, но он принял.
Сева20 уровень, Москва
24 июня, 10:10
Сделал также, не надо вообще ничего - просто добавил вывел.
Сергей Козырев24 уровень, Москва
7 июня, 08:20
Возможно, неоптимально, но по логике для нуба типа меня просто: 1. Положить все байты сразу в LinkedHashSet (чтобы отсечь повторы) 2. Переложить из LinkedHashSet в ArrayList через addAll (это необходимо, т.к. LinkedHashSet я не знаю, как быстро отсортировать - Collections.sort на него не действует) 3. Отсортировать ArrayList через Collections.sort и вывести его на печать, не забыв про пробелы
Anton Rymarenko23 уровень
26 мая, 10:40
SortedSet<Integer> getByte=new TreeSet<>(set); -можно только это использовать . Но меня все не покидает чувство что множество это жирно для подсчета байт значений , но быстро )))
эволюта23 уровень
11 мая, 12:04
Просто добавляйте считанные байты не в лист а в сет. Сет сам будет убивать все дубликаты. Потом просто сортируете этот сет в порядке возрастания и все. Можно чуть усложнить, для тренировки, сохранить последовательность байтов в лист, отсортировать в листе через методы коллекции байты и закинуть уже отсортированный лист в сет, далее выводим сет в консоль и задача решена.
SoloH18 уровень
21 апреля, 19:16
18 строк кода, если делать через стрим и лямбду, создавая только ArrayList, главное не забыть про distinct(). Вывод в одну строчку.
8 мая, 10:55
18 строчек вместе с import ??? даже с ними через стримы и лямбду что то многовато будет.....
Мишаня20 уровень
18 апреля, 06:10
ленивые листом обошлись без мапов и сетов )
Roman Afonin32 уровень, Санкт-Петербург
30 марта, 14:38
эм... а я просто через arrayList. Добавлял только уникальные значения, а затем их отсортировал
Владислав Пахомов25 уровень, Белгород
23 марта, 11:16
TreeMap используйте. Там сразу по порядку идут ключи.
Семён22 уровень, Екатеринбург
14 апреля, 01:19
TreeSet тогда уже, зачем память перегружать еще и значениями, нам только ключи нужны)
Harry22 уровень, Москва
21 марта, 21:09
int[] inArray = new int[255]; где индекс массива inArray - ASCII код считанного байта. Хотя конечно повспоминать Tree и остальное тоже полезно =) Ну и если большой файл, то можно успеть кофе сделать пока идет сортировка =)