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

  • 10
  • Недоступна
Ввести с консоли имя файла. Считать все байты из файла. Не учитывая повторений - отсортировать их по байт-коду в возрастающем порядке. Вывести на экран. Закрыть поток ввода-вывода. Пример байт входного файла: 44 83 44 Пример вывода: 44 83
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (130)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Дмитрий Кудрявцев18 уровень, Омск
вчера, 17:58
Сортировка подсчётом рулит!
Ольга19 уровень, Москва
14 августа, 20:30
с аррай листом решить не получилось, билась несколько дней. с Три сет-моментально)))
Ян19 уровень
6 августа, 17:45
А вот в этой задаче пришлось сначала закрыть поток ввода, а потом делать вывод в консоль. До этого валидатор принимал любой порядок (в данном блоке задач).
Luk_d26 уровень
12 августа, 20:20
Нет, у меня приняло и с потоком закрытым в конце. TreeSet - наше всё.
Александр19 уровень
14 августа, 11:34
Массив - наше всё. Коллекции - это слишком медленно, грубо и неуместно тут
Luk_d26 уровень
14 августа, 13:46
Разок прописать и попробовать - самое то
Applejack20 уровень, Минск
14 августа, 17:15
16-20ms. 5-7 строк кода. Быстро, просто, красиво
Александр19 уровень
15 августа, 08:52
12 строк - весь код в мейне с переносами, объявлениями переменных и т.п. 16-20 мс на каком объеме файла?
Nail27 уровень, Кельн
29 июля, 12:18
Я сделал так, не претендую на самый лучший способ: 1) создаем ArrayList 2) заполняем его данными
while (file.available() > 0){
    arrayList.add(file.read());
}
3) Сортируем по возрастанию, Создаем сет и кладем в него наш список для того что бы отсеять повторения, очищаем список и копируем в него обратно наш сет.
Collections.sort(arrayList);
Set<Integer> set  = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(set);
4) не забываем вывести все в консоль, профит!
Evgeny Gaychenkov19 уровень, Самара
6 августа, 09:29
тогда уж сразу создать HashSet и заполнить его данными, повторы сами удаляться, потом создать ArrayList и с копировать все из HashSet и отсортировать. А еще лучше TreeSet там и сортировать нечего. Ввел данные и вывел.
Олег Нейман23 уровень
6 часов назад
Поддерживаю!!! Сразу в TreeSet полученный лист и с него же выводить на экран! Готово
Yerzhan20 уровень
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).
Ярослав Неило22 уровень, Киев
13 июня, 10:15
Реализовал и выборку и сортировку используя только TreeSet. TreeSet - это только уникальные значения в порядке от меньшего к большему. Боялся, что валидатор не примет такое решение, но он принял.
Сева26 уровень, Москва
24 июня, 10:10
Сделал также, не надо вообще ничего - просто добавил вывел.
Сергей Козырев28 уровень, Москва
7 июня, 08:20
Возможно, неоптимально, но по логике для нуба типа меня просто: 1. Положить все байты сразу в LinkedHashSet (чтобы отсечь повторы) 2. Переложить из LinkedHashSet в ArrayList через addAll (это необходимо, т.к. LinkedHashSet я не знаю, как быстро отсортировать - Collections.sort на него не действует) 3. Отсортировать ArrayList через Collections.sort и вывести его на печать, не забыв про пробелы
Anton Rymarenko26 уровень
26 мая, 10:40
SortedSet<Integer> getByte=new TreeSet<>(set); -можно только это использовать . Но меня все не покидает чувство что множество это жирно для подсчета байт значений , но быстро )))
эволюта23 уровень
11 мая, 12:04
Просто добавляйте считанные байты не в лист а в сет. Сет сам будет убивать все дубликаты. Потом просто сортируете этот сет в порядке возрастания и все. Можно чуть усложнить, для тренировки, сохранить последовательность байтов в лист, отсортировать в листе через методы коллекции байты и закинуть уже отсортированный лист в сет, далее выводим сет в консоль и задача решена.
Danil Guschin19 уровень
10 августа, 21:47
как сортировать set? вот ArrayList знаю как, а Set что-то не очень)))))
Danil Guschin19 уровень
10 августа, 21:47
вроде как Set это и есть беспорядочное множество
omat_kisat19 уровень, MIPS Assembly
13 сентября, 14:25
есть специальная структура данных, называется TreeSet, добавляет сразу согласно natural order, для Integer это в порядке возрастания. Тут некоторые ругаются, что медленно и тяжело, лямбдами кидаются, но TreeSet, как по мне, идеальная структура данных для задачи, где а) нужно вывести данные без повторов; б) данные должны быть отсортированы в заданном порядке.
SoloH18 уровень
21 апреля, 19:16
18 строк кода, если делать через стрим и лямбду, создавая только ArrayList, главное не забыть про distinct(). Вывод в одну строчку.
8 мая, 10:55
18 строчек вместе с import ??? даже с ними через стримы и лямбду что то многовато будет.....