Skip to main content

🟡 剑指 Offer II 037. 小行星碰撞

LeetCode 提示

题目难度 中等

原题链接 🔗 leetcode

题解1#

用栈来搞。只要重点关注栈顶为正且入栈数为负的情况即可。其他情况都不会碰。

class Solution {    public int[] asteroidCollision(int[] asteroids) {        var ans = new LinkedList<Integer>();        for (int ast : asteroids) {            if (ans.isEmpty()) {                ans.add(ast);                continue;            }
            var allowIn = true;            while (!ans.isEmpty() && ans.getLast() > 0 && ast < 0) {                var last = ans.getLast();                if (last + ast > 0) {                    allowIn = false;                    break;                }                if (last + ast == 0) {                    ans.removeLast();                    allowIn = false;                    break;                }                if (last + ast < 0) {                    ans.removeLast();                }            }            if (allowIn) {                ans.add(ast);            }        }
        int n = ans.size();
        var res = new int[n];        for (int i=0; i<n; i++) {            res[i] = ans.get(i);        }        return res;    }}