題目鏈接
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;
}
};