LeetCode 735 行星碰撞[栈 模拟] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 735 行星碰撞[栈 模拟] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

解题思路:
一道比较复杂的模拟题,首先要明白,行星碰撞的条件是左边的行星速度为正,右边行星速度为负才能碰撞,并且可以发生连续碰撞,即右边行星向左并且比左边向右的行星大,一直碰撞到遇到比右边行星大的或者大小相同或者没有向右行星,所以要用栈来存储。在遍历的时候,首先判断方向,如果相向而行,while循环开始不断碰撞,碰撞结束,最后相向大小相同则都消失,没有向右行星把当前行星放入,最后遍历栈放入vector并反向,代码如下:

class Solution 
public:
    vector<int> asteroidCollision(vector<int>& asteroids) 
        stack<int> s;
        vector<int> ans;
        for(auto& asteroid : asteroids) 
            if(s.empty()) 
                s.push(asteroid);
             else 
                int top = s.top();
                if(top > 0 && asteroid < 0) 
                    while(top > 0 && asteroid + top < 0) 
                        s.pop();
                        if(s.empty()) 
                            break;
                        
                        top = s.top();
                    
                    if(top + asteroid == 0) 
                        s.pop();
                        continue;
                    
                    if(s.empty() || (!s.empty() && s.top() < 0)) 
                        s.push(asteroid);
                     
                 else 
                    s.push(asteroid);
                
            
        
        while(!s.empty()) 
            ans.push_back(s.top());
            s.pop();
        
        reverse(ans.begin(), ans.end());
        return ans;
    
;

以上是关于LeetCode 735 行星碰撞[栈 模拟] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode——735.行星碰撞

[LeetCode] 735. Asteroid Collision

LeetCode 0735.行星碰撞:两种方法(方法二是方法一的优化)

10.18--一下午连肝20道leetcode题(纯C实现)

Leetcode 735. Asteroid Collision

小行星碰撞 Asteroid Collision