You are given an array asteroids
of integers representing asteroids in a row. For each asteroid, the absolute value represents its size, and the sign represents its direction (positive for right, negative for left). Each asteroid moves at the same speed.
Find out the state of the asteroids after all collisions. If two asteroids meet, the smaller one will explode. If both are the same size, both will explode. Two asteroids moving in the same direction will never meet.
Example 1:
Input: asteroids = [5, 10, -5]
Output: [5, 10]
Explanation: The 10 and -5 collide resulting in 10. The 5 and 10 never collide.
Example 2:
Input: asteroids = [8, -8]
Output: []
Explanation: The 8 and -8 collide exploding each other.
Example 3:
Input: asteroids = [10, 2, -5]
Output: [10]
Explanation: The 2 and -5 collide resulting in -5. The 10 and -5 collide resulting in 10.
Example 4:
Input: asteroids = [-2, -1, 1, 2]
Output: [-2, -1, 1, 2]
Explanation: The -2 and -1 are moving to the left, while the 1 and 2 are moving to the right. Asteroids moving the same direction never meet, so no collisions occur.
[]
.>0
), push it onto the stack.<0
), compare it with the top element of the stack:
The time complexity is (O(n)) where (n) is the number of asteroids because each asteroid is processed at most once (pushed and popped from the stack).
def asteroidCollision(asteroids):
stack = []
for asteroid in asteroids:
while stack and asteroid < 0 < stack[-1]:
if stack[-1] < -asteroid:
stack.pop()
continue
elif stack[-1] == -asteroid:
stack.pop()
break
else:
stack.append(asteroid)
return stack
# Example cases
print(asteroidCollision([5, 10, -5])) # Output: [5, 10]
print(asteroidCollision([8, -8])) # Output: []
print(asteroidCollision([10, 2, -5])) # Output: [10]
print(asteroidCollision([-2, -1, 1, 2])) # Output: [-2, -1, 1, 2]
This code follows the strategy and efficiently handles the asteroid collision as described in the problem statement.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?