November 30, 2019

735. Asteroid Collision

735. Asteroid Collision

模拟题,用 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;
    }
}
comments powered by Disqus