735. 行星碰撞

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/asteroid-collision
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.Stack;

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        if (asteroids == null || asteroids.length == 0) {
            return new int[0];
        }
        Stack<Integer> stack = new Stack<>();
        for (int asteroid : asteroids) {
            boolean push = true;
            while (!stack.isEmpty() && stack.peek() > 0 && asteroid < 0) {
                if (Math.abs(stack.peek()) < Math.abs(asteroid)) {
                    stack.pop();
                } else {
                    push = false;
                    if (Math.abs(stack.peek()) == Math.abs(asteroid)) {
                        stack.pop();
                    }
                    break;
                }
            }
            if (push) {
                stack.push(asteroid);
            }
        }

        int[] ans = new int[stack.size()];

        int index = ans.length - 1;
        while (!stack.isEmpty()) {
            ans[index--] = stack.pop();
        }

        return ans;
    }
}
上一篇:力扣之旅第29天(第32题:最长有效括号)


下一篇:gcc栈溢出保护机制:stack-protector【转】