From 6f46f55b9f4b691d945b100f71d2bf2ceb8288b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=92=D0=B0=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=B5=D0=B2?= Date: Thu, 4 Dec 2025 12:31:07 +0300 Subject: [PATCH 1/2] feat: [LeetCode #735] Asteroid Collision MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Тип: Сложность: Временная сложность: O() Пространственная сложность: O() Краткое описание решения: - Ссылка: https://leetcode.com/problems/asteroid-collision/ --- src/stack/asteroid_collision/__init__.py | 0 src/stack/asteroid_collision/solution.py | 0 tests/test_asteroid_collision.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/stack/asteroid_collision/__init__.py create mode 100644 src/stack/asteroid_collision/solution.py create mode 100644 tests/test_asteroid_collision.py diff --git a/src/stack/asteroid_collision/__init__.py b/src/stack/asteroid_collision/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/stack/asteroid_collision/solution.py b/src/stack/asteroid_collision/solution.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_asteroid_collision.py b/tests/test_asteroid_collision.py new file mode 100644 index 0000000..e69de29 From 5017bb475a3a5e3ae447e2caa295770cbb696187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=92=D0=B0=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=B5=D0=B2?= Date: Thu, 4 Dec 2025 12:31:40 +0300 Subject: [PATCH 2/2] feat: [LeetCode #735] Asteroid Collision MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Тип: Stack Сложность: medium Временная сложность: O(n) Пространственная сложность: O(1) - Ссылка: https://leetcode.com/problems/asteroid-collision/ --- src/stack/asteroid_collision/solution.py | 20 ++++++++++++++++++++ tests/test_asteroid_collision.py | 18 ++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/stack/asteroid_collision/solution.py b/src/stack/asteroid_collision/solution.py index e69de29..23d5fd3 100644 --- a/src/stack/asteroid_collision/solution.py +++ b/src/stack/asteroid_collision/solution.py @@ -0,0 +1,20 @@ +class Solution: + def asteroidCollision(self, asteroids: list[int]) -> list[int]: + stack = [] + for asteroid in asteroids: + while asteroid: + try: + left_asteroid = stack.pop() + if asteroid > 0 or (asteroid < 0 and left_asteroid < 0): + stack.extend([left_asteroid, asteroid]) + asteroid = None + else: + if abs(asteroid) == abs(left_asteroid): + asteroid = None + elif abs(asteroid) < abs(left_asteroid): + stack.append(left_asteroid) + asteroid = None + except IndexError: + stack.append(asteroid) + asteroid = None + return stack diff --git a/tests/test_asteroid_collision.py b/tests/test_asteroid_collision.py index e69de29..5f2e4fc 100644 --- a/tests/test_asteroid_collision.py +++ b/tests/test_asteroid_collision.py @@ -0,0 +1,18 @@ +import pytest +from src.stack.asteroid_collision.solution import ( + Solution, +) + + +@pytest.mark.parametrize( + "asteroids, expected", + [ + ([5, 10, -5], [5, 10]), + ([8, -8], []), + ([10, 2, -5], [10]), + ([3, 5, -6, 2, -1, 4], [-6, 2, 4]), + ], +) +def test_asteroid_collision(asteroids, expected): + solution = Solution() + assert solution.asteroidCollision(asteroids) == expected