-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAsteroid Collision.java
41 lines (39 loc) · 1.29 KB
/
Asteroid Collision.java
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
class Solution {
public int[] asteroidCollision(int[] asteroids) {
List<Integer> list = new ArrayList<>();
int index = 0; // marks the division between going left and right
Stack<Integer> goRight = new Stack<>();
for(int i = 0; i < asteroids.length; i++) {
int cur = asteroids[i];
// going left
if(cur < 0) {
while(!goRight.isEmpty()) {
int prev = goRight.pop();
if(cur + prev == 0) {
cur = 0;
break;
}
else if(cur + prev > 0) {
cur = prev;
break;
}
}
if(cur < 0){
list.add(cur);
index++;
}
else if(cur > 0) goRight.push(cur);
}
// going right
else {
goRight.push(cur);
}
}
while(!goRight.isEmpty()) {
list.add(index, goRight.pop());
}
int[] res = new int[list.size()];
for(int i = 0; i < res.length; i++) res[i] = list.get(i);
return res;
}
}