模拟题,用 Stack. Time = O(n), Space = O(n)
class Solution {
public int[] asteroidCollision(int[] asteroids) {
Deque<Integer> deque = new ArrayDeque<>();
for (int i = 0; i < asteroids.length; i++) {
int asteroid = asteroids[i];
if (asteroid > 0) { // to right
deque.offerFirst(asteroid);
} else { // to left
if (deque.isEmpty() || deque.peekFirst() < 0) {
deque.offerFirst(asteroid);
} else {
if (Math.abs(deque.peekFirst()) < Math.abs(asteroid)) {
i --;
deque.pollFirst();
} else if (Math.abs(deque.peekFirst()) == Math.abs(asteroid)) {
deque.pollFirst();
}
}
}
}
int[] res = new int[deque.size()];
for (int i = 0; i < res.length; i++) {
res[i] = deque.pollLast();
}
return res;
}
}