行星碰撞


題目鏈接

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;
        
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章