5222. Столкновение астероидов
Medium
2 решили
Дан массив целых чисел
• знак — направление: положительный летит вправо, отрицательный — влево;
• модуль — размер астероида.
Нулей в массиве нет.
Когда бывает столкновение. Два астероида сталкиваются, только если левый летит вправо, а правый — влево (они движутся навстречу). Если оба летят в одну сторону или «разъезжаются» (слева отрицательный, справа положительный), они не встречаются.
Правила при встрече (сравнивают модули размеров):
• меньший уничтожается, больший продолжает полёт;
• при равных модулях уничтожаются оба;
• уцелевший может сразу столкнуться со следующим на пути — столкновения идут цепочкой, пока навстречу есть противник.
Верните массив астероидов, которые останутся, в том же порядке слева направо.
asteroids. Каждый элемент — астероид на одной числовой оси (позиции идут слева направо в порядке массива):• знак — направление: положительный летит вправо, отрицательный — влево;
• модуль — размер астероида.
Нулей в массиве нет.
Когда бывает столкновение. Два астероида сталкиваются, только если левый летит вправо, а правый — влево (они движутся навстречу). Если оба летят в одну сторону или «разъезжаются» (слева отрицательный, справа положительный), они не встречаются.
Правила при встрече (сравнивают модули размеров):
• меньший уничтожается, больший продолжает полёт;
• при равных модулях уничтожаются оба;
• уцелевший может сразу столкнуться со следующим на пути — столкновения идут цепочкой, пока навстречу есть противник.
Верните массив астероидов, которые останутся, в том же порядке слева направо.
Пример: [5, 10, -5] 5 → 10 → ← -5 −5 летит навстречу 10. |−5| < 10 → −5 уничтожен. 5 и 10 оба летят вправо — не сталкиваются. Ответ: [5, 10]
Примеры:
Вход:
[5, 10, -5]
Выход:
[5, 10]
Объяснение: −5 летит навстречу 10 и меньше по модулю — уничтожается. 5 и 10 оба вправо, не встречаются → [5, 10].
Вход:
[8, -8]
Выход:
[]
Объяснение: 8 и −8 встречаются с равным размером — оба исчезают → [].
Вход:
[10, 2, -5]
Выход:
[10]
Объяснение: Сначала 2 сталкивается с −5 и гибнет. Затем 10 встречается с −5: 10 больше → −5 уничтожен. Остаётся [10].
Вход:
[-2, -1, 1, 2]
Выход:
[-2, -1, 1, 2]
Объяснение: Слева все летят влево, справа — вправо: они разъезжаются, встречных пар нет → массив без изменений.
Ограничения:
1 <= asteroids.length <= 10^4
-1000 <= asteroids[i] <= 1000
asteroids[i] != 0
Решите эту задачу в браузере
Создайте бесплатный аккаунт — редактор Python, Java, JavaScript и Go, проверка на тестах за секунды.
Комментарии (1)
Зарегистрируйтесь или войдите, чтобы оставить комментарий