Задачу решил, но метод "sort" получился уж больно громоздким, и так сказать "глаз не радует".
Раз готовый код выкладывать нелься, то опишу по порядку действий:
1) Создаём boolean массив, который хранит true/false по индексу оригинального массива, в зависимости от содержимого (т.е. array[0] - строка, значит boolean[0] = false и т.д.)
2) Создаём 2 ArrayList для строк и чисел.
3) В самом обычном цикле всё делим по ArrayList и заполняем boolean массив.
4) Далее сортируем оба ArrayList методом Collection.sort. Для строк используя ... new Comparator<String>, переопределяя его метод "compare", для чисел просто ...Collection.reverseOrder().
5) Ну и в финале, имея отсортированный ArrayList строк и чисел, и имея boolean массив, в котором сказано что должно быть на том или ином месте исходного массива - заполняем исходный array.
Как я и сказал всё работает, задача прошла проверку, но есть пара вопросов:
1) Реализация метода получилось громоздкой, но всё же работает... Поэтому есть ли смысл заморачиваться по этому поводу, пытаясь найти более компактное решение (вопрос не столько по данной задаче, сколько о программировании в целом)?
2) Какой алгоритм для решения конкретной задачи можно ещё придумать?
Артём
4 уровень
Вопрос по алгоритму
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia MarioMaster
20 мая 2020, 20:31
Привет.
вот мой код по задачи.
да, слегка не очевидный и с 1й ошибкой:)
0
AlukardVampire hunter в The HellsingExpert
20 мая 2020, 20:07
В задачах как раз таки и надо выкладывать свой код чтобы люди смотрели что у тебя не так и подсказывали. Это в комментариях не рекомендуется выкладывать готовое решение.
Данную задачу я реализовал не прибегая к импорту коллекций, новых списков или используя готовые способы сортировки.
Только на основе доступных в задаче методов.
Получилось так.
0
Ksenia MarioMaster
20 мая 2020, 20:34
прикольно. не видала запись
!isNumber(array[i]) == false
0
AlukardVampire hunter в The HellsingExpert
20 мая 2020, 21:23
Теперь увидели, да это я отсебятены какой-то налепил🤭
(!isNumber(array[i]))
Я думаю так тоже бы работало...наверное О.о
0
Павел Нефёдов
20 мая 2020, 20:05
+1
Павел Нефёдов
20 мая 2020, 20:04
2. Я сделал по другому
1 - Записал всё в лист.
2 - Преобразовал его в массив строк String[]
3 - Вызвал метод sort
4 - Брал элемент, если это число, то искал следующее в массиве после выбранного элемента число и сравнивал их, проводя сортировку методом пузырька. Если же это была строка, то искал по всему массиву следующую строку и также сравнивал их.
0
Павел Нефёдов
20 мая 2020, 19:57
1. Конечно заморачиваться о более емком и аккуратном коде стоит - это не только приятно, но и сэкономит тебе кучу времени + облегчит жизнь твои коллегам.
0