

第一版,没有想到相向移动不会被撞

class Solution {
public:
vector<int> asteroidCollision(vector<int>& asteroids) {
vector<int> ret;
if(asteroids.empty())
return ret;
// ret.push_back(asteroids[0]);
for(auto & i : asteroids){
bool add = true;
while(!ret.empty() && ret.back()*i < 0){
if(abs(ret.back()) == abs(i)){
ret.pop_back();
add = false;
break;
//两败俱伤
}else if(abs(ret.back()) < abs(i)){
ret.pop_back();
continue;
//i还可以继续撞
}else if(abs(ret.back()) > abs(i)){
add = false;
break;
}
}
if(add)
ret.push_back(i);
}
return ret;
}
};
第二版,其实第一版大体思路没错,就是只有第一个向右,第二个向左这种情况会发生碰撞,其他都不会,要注意到这一点。

class Solution {
public:
vector<int> asteroidCollision(vector<int>& asteroids) {
vector<int> ret;
if(asteroids.empty())
return ret;
for(auto &i:asteroids){
// if(ret.empty() || (ret.back() < 0 && i > 0) || (ret.back()*i > 0)){
// ret.push_back(i);
// }
bool add = true;
while(!ret.empty() && ret.back() > 0 && i < 0){
if(abs(ret.back()) > abs(i)){
add = false;
break;
}else if(abs(ret.back()) == abs(i)){
add = false;
ret.pop_back();
break;
}else if(abs(ret.back()) < abs(i)){
ret.pop_back();
continue;
}
}
if(add)
ret.push_back(i);
}
return ret;
}
};
1686

被折叠的 条评论
为什么被折叠?



