leetcode 735. Asteroid Collision

leetcode 735. Asteroid Collision

题意:给你一个数组,正数会往右移,负数会往左移,移动速度一样,两个数字相撞的话,绝对值大的数会破坏绝对值小的数,问你最后数组的状态。

模拟一下,应该不难。

class Solution {
public:
	vector<int> asteroidCollision(vector<int>& asteroids) {
		stack<int> ans;
		for (int i = 0; i<asteroids.size(); i++)
		{
			if (ans.empty()) ans.push(asteroids[i]);
			else
			{
				if (ans.top() < 0 && asteroids[i] < 0)
					ans.push(asteroids[i]);
				else if (ans.top() > 0 && asteroids[i] > 0)
					ans.push(asteroids[i]);
				else if (ans.top() < 0 && asteroids[i] > 0)
					ans.push(asteroids[i]);
				else if (ans.top() > 0 && asteroids[i] < 0)
                                { 
                                        int flag = 1;
					while (!ans.empty())
					{
						int num = ans.top();
						if (num > 0 && num < abs(asteroids[i]))// 
						{
							ans.pop();
						}
						else if (num > 0 && num > abs(asteroids[i]))
						{
							flag = 0;
							break;
						}
						else if (num > 0 && num == abs(asteroids[i]))
						{
							flag = 0;
							ans.pop();
							break;
						}
                                                else if (num < 0)
						{
							break;
						}
					}
					if (flag == 1) ans.push(asteroids[i]);
				}
			}
		}
		int size = ans.size();
		vector<int> aans(size);
		size--;
		while (!ans.empty())
		{
			aans[size--] = ans.top();
			ans.pop();
		}
		return aans;
	}
};

猜你喜欢

转载自blog.csdn.net/sea_muxixi/article/details/79957786