-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy path735.asteroid-collision.py
47 lines (40 loc) · 1.27 KB
/
735.asteroid-collision.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#
# @lc app=leetcode id=735 lang=python3
#
# [735] Asteroid Collision
#
# @lc code=start
# TAGS: Stack
class Solution:
# Pythonic
# 108 ms, 26.73%. Time and Space: O(N).
def asteroidCollision(self, asteroids: List[int]) -> List[int]:
stack = []
for asteroid in asteroids:
while stack and asteroid < 0 < stack[-1]:
prev = stack.pop()
# Both got destroyed
if prev + asteroid == 0:
break
# Else get the bigger one by size
asteroid = max(asteroid, prev, key=abs)
else:
stack.append(asteroid)
return stack
# Any language
# 96 ms, 73.31%. Time and Space: O(N)
def asteroidCollision(self, asteroids: List[int]) -> List[int]:
stack = []
for asteroid in asteroids:
while stack and asteroid < 0 and 0 < stack[-1]:
prev = stack.pop()
# Both got destroyed
if abs(asteroid) == abs(prev):
asteroid = 0
# The biggest one by size
elif abs(asteroid) < abs(prev):
asteroid = prev
if asteroid:
stack.append(asteroid)
return stack
# @lc code=end