0735. Asteroid Collision

0735. Asteroid Collision #

题目 #

  • 给定一个整数数组 asteroids,表示在同一行的行星。

  • 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。

  • 找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。

思路 #

#

代码 #

#

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        Stack<Integer> stack = new Stack<>();
        for (int asteroid: asteroids) {
            boolean isExist = true;
            if (stack.size() == 0) stack.push(asteroid);
            else if (stack.peek() * asteroid > 0) stack.push(asteroid);
            else if (stack.peek() < 0 && asteroid > 0) stack.push(asteroid);
            else while (isExist == true) {
                if (stack.size() == 0 || stack.peek() < 0) {
                    stack.push(asteroid);
                    break;
                }
                else if (stack.peek() + asteroid == 0) {
                    stack.pop();
                    isExist = false;
                }
                else if (stack.peek() + asteroid > 0) isExist = false;
                else stack.pop();
            }
        }
        
        int[] ans = new int[stack.size()];
        for (int i = 0; i < ans.length; i++) ans[ans.length-1-i] = stack.pop();
        return ans;
    }
}