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. Asteroid Collision
LeetCode 0735.行星碰撞:两种方法(方法二是方法一的优化)
10.18--一下午连肝20道leetcode题(纯C实现)