解题思路
通过题目描述可以了解到,只有当数组中正负数分界线左边为正数,右边为负数时,才会发生碰撞,当数组中全为负数或者全为正数时(即不存在分界线),或者分界线左侧为负数,右侧为正数,例如 [-2,-1,1,2]以上几种情况时,不可能发生碰撞。
用一个辅助栈
当当前元素与栈顶元素异号,且分界线左侧为正数,右侧为负数(此时当前元素应为负,栈内元素为正),判断栈顶元素和当前元素绝对值大小
1:当前元素绝对值<栈顶元素绝对值,栈顶元素不变,即此时当前元素爆炸;
2:当前元素绝对值>栈顶元素绝对值,栈顶元素爆炸,栈顶元素出栈;
3.当前元素绝对值=栈顶元素绝对值,两者都爆炸,栈顶元素出栈;
其他情况下,当前元素入栈;
class Solution {
public int[] asteroidCollision(int[] asteroids) {
int l=asteroids.length;
Deque stack=new linkedList<>();//定义一个辅助栈
int i=0;
while(iMath.abs(asteroids[i])){
flag=true;
break;
//当前元素绝对值大于栈顶元素绝对值,栈顶元素出栈,当前元素继续与新栈顶元素比较
}else if(asteroids[i]<0&&Math.abs(stack.peek())=0;j--){
ret[j]=stack.pop();
}
return ret;
}
}



