Asteroid Collision

題目
We are given an array asteroids of integers representing asteroids in a row.

For each asteroid, the absolute value represents its size, and the sign represents its direction (positive meaning right, negative meaning left). Each asteroid moves at the same speed.

Find out the state of the asteroids after all collisions. If two asteroids meet, the smaller one will explode. If both are the same size, both will explode. Two asteroids moving in the same direction will never meet.

答案

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        Stack<Integer> stk = new Stack<Integer>();
        for(int i = 0; i < asteroids.length; i++) {
            if(stk.isEmpty() || (stk.peek() < 0 || asteroids[i] > 0)) {
                stk.push(asteroids[i]);
            } else {
                int last_asteroid = stk.peek();
                int curr_asteroid_mass = Math.abs(asteroids[i]);
                // As long as there is collision, keep doing this
                while(last_asteroid > 0 && asteroids[i] < 0) {
                    if(last_asteroid == curr_asteroid_mass) {
                        stk.pop();
                        break;
                    }
                    else if(last_asteroid < curr_asteroid_mass) {
                        stk.pop();
                        // if no other collisions, push
                        if(stk.isEmpty() || (stk.peek() < 0 || asteroids[i] > 0))
                            stk.push(asteroids[i]);
                    }
                    else {
                        break;
                    }
                    if(stk.isEmpty()) break;
                    last_asteroid = stk.peek();
                }
            }
        }

        int[] ret = new int[stk.size()];
        int i = stk.size() - 1;
        while(!stk.isEmpty()) ret[i--] = stk.pop();
        return ret;
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容