题目链接
https://leetcode-cn.com/problems/asteroid-collision/description/
题目分析
该题目也是一道用栈的思想的题,栈有两种操作,一种是入栈,一种是出栈。
什么时候入栈呢?分析题目知当当前数是整数时(asteroids[i]>0)一定入栈,无论当前栈顶是正是负,当栈顶为负数时,无论当前数是正是负,一定入栈。
出栈又细分为两种情况,第一种情况,当当前数小于0且绝对值大于栈顶时,出栈,直到遇到比他的绝对值大的,判断下一个数;当相等时,出栈,下一个数;当当前数小于零且绝对值小于栈顶时,下一个数。
class Solution {
public:
vector<int> asteroidCollision(vector<int>& asteroids) {
vector<int> s;
int i = 0;
while(i<asteroids.size()){
if(s.size()==0||asteroids[i]>0||s.back()<0){
s.push_back(asteroids[i]);
i++;
}
else {
if(s.back()>-1*asteroids[i])i++;
else if(s.back()<-1*asteroids[i])s.pop_back();
else {
s.pop_back();
i++;
}
}
}
return s;
}
};