解题思路
1.正右左负
2.使用整数数组,左正右负才会发生碰撞
碰撞分三种情况:
容器尾的值大于要进入数值的绝对值时,表示为新值=0;新行星被老行星吸收了
容器尾的值等于要进入数值的绝对值时,表示为弹出尾部的值,新值=0;两个行星抵消了
容器尾的值小于要进入数值的绝对值时,表示为弹出尾部的值,保存新值; 新行星把老行星吃掉了
代码
class Solution {
public:
vector<int> asteroidCollision(vector<int>& asteroids) {
vector<int> res;
for(int ast : asteroids){
while(res.size() != 0 && res.back() > 0 && ast < 0){
if(res.back() > abs(ast)){
ast = 0;
}else if(res.back() == abs(ast)){
res.pop_back();
ast = 0;
}else{
res.pop_back();
}
}
if(ast != 0 ){
res.push_back(ast);
}
}
return res;
}
};