给定一个整数数组 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;
}
}