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;
}
}