Решил задачу следующим образом: создал цикл в цикле
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array.length-1; j++)
и далее тупо все значения = null сдвинул в право
if (array[j]==null)
array[j]=array[j+1];
array[j+1]=null;
Валидатор решение принял, но заглянув в правильное решение обнаружил, что ответ прописан через создание нового объекта с копирование элементов.
Возникли сомнения "Насколько корректно я решил задачу?". Можно ли вообще пользоваться таким способом при написании кода или в последствии могут появиться критические ошибки и лучше использовать способ из ответника к задаче?
Anonymous #2601218
37 уровень
Нужен совет опытных.
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий Backend Developer
28 апреля 2021, 13:30
Минус твоего решения - Это алгоритмическая сложность.
Не могу посмотреть правильное решение, но если там просто создание нового массива и копирование в него всех элементов не равных null, то алгоритмическая сложность правильного решения - O(n).
у тебя же, за счет вложенного цикла - O(n^2)(n в квадрате). То есть несколько менее эффективно. Вот и всё. Стоит ли использовать твое решение или рекомендованное зависит только от условий. В данном случае алгоритмической сложностью можно пренебречь и оставить как есть
+1
Anonymous #2601218
28 апреля 2021, 13:50
Там О(n). Мое действительно замедляет процесс обработки кода. Спасибо.
0
Flexo Bending Unit #3370318
28 апреля 2021, 13:24
Верных решений у любой задачи может быть несколько. А может и не несколько, а огромное количество. Какой-то код более рациональный, потому что выполняется быстрее, какой-то занимает меньше памяти, а какой-то просто красивый. У каждого решения могут быть свои плюсы.
Вы хорошо справились с задачей в том смысле, что не использовали дополнительную память для хранения ещё одного массива. Однако ваш код будет выполняться дольше из-за вложенного цикла. В этом я вижу главное отличие вашего решения от референсного. Если решение принято, значит оно валидное, критических ошибок в нём, скорее всего, не появится. (это как правило, но не обязательно: те, кто писал критерии проверки - тоже могли ошибаться).
Заглядывать в ответ иногда полезно, возможно, узнаете для себя что-то новое и посмотрите на задачу под другим углом, будете знать разные подходы к решению... но наиболее ценное - именно ваше решение, к которому вы пришли сами без прямых подсказок.
+1
Anonymous #2601218
28 апреля 2021, 13:47
Спасибо за разъяснение. Приму к сведению.
0