We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
题目描述:
给定一个整数数组 asteroids,表示在同一行的行星。
对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
示例 1:
输入: asteroids = [5, 10, -5] 输出: [5, 10] 解释: 10 和 -5 碰撞后只剩下 10。 5 和 10 永远不会发生碰撞。
示例 2:
输入: asteroids = [8, -8] 输出: [] 解释: 8 和 -8 碰撞后,两者都发生爆炸。
示例 3:
输入: asteroids = [10, 2, -5] 输出: [10] 解释: 2 和 -5 发生碰撞后剩下 -5。10 和 -5 发生碰撞后剩下 10。
示例 4:
输入: asteroids = [-2, -1, 1, 2] 输出: [-2, -1, 1, 2] 解释: -2 和 -1 向左移动,而 1 和 2 向右移动。 由于移动方向相同的行星不会发生碰撞,所以最终没有行星发生碰撞。
说明:
数组 asteroids 的长度不超过 10000。 每一颗行星的大小都是非零整数,范围是 [-1000, 1000] 。
解题思路:常规的使用栈,遇到符号不一样就进行加减,特殊情况:左边全是负数的,不需加减。 对比绝对值大小,若相等(说明相加等于0),出栈一个数; 若原来栈顶的大,无需出栈,跳过此行星,继续比下一个 若当前的行星大,首先出栈一个元素,1:若此时空栈,直接当前行星入栈 2:若此时栈顶和当前行星同符号(都为负),入栈 3:1,2都不符合,继续循环对比栈顶元素
C++解法:
class Solution { public: vector<int> asteroidCollision(vector<int>& asteroids) { vector<int> res; for (int i = 0; i < asteroids.size(); i++) { if (res.empty() || res.back()*asteroids[i] >= 0) { res.push_back(asteroids[i]); }else{ //左边全是负数,右边全是正数的情况 if(res.back() < 0 && asteroids[i] > 0){ res.push_back(asteroids[i]); continue; } int ttt = asteroids[i]; while(res.back()*ttt < 0){ if (ttt+res.back() == 0) { res.pop_back(); break; }else{ if (abs(res.back()) > abs(ttt)) break; else{ res.pop_back(); if(res.empty() || res.back()*ttt > 0){ res.push_back(ttt); break; } } } } } } return res; } };
The text was updated successfully, but these errors were encountered:
No branches or pull requests
题目描述:
给定一个整数数组 asteroids,表示在同一行的行星。
对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
示例 1:
示例 2:
示例 3:
示例 4:
说明:
解题思路:常规的使用栈,遇到符号不一样就进行加减,特殊情况:左边全是负数的,不需加减。
对比绝对值大小,若相等(说明相加等于0),出栈一个数;
若原来栈顶的大,无需出栈,跳过此行星,继续比下一个
若当前的行星大,首先出栈一个元素,1:若此时空栈,直接当前行星入栈 2:若此时栈顶和当前行星同符号(都为负),入栈 3:1,2都不符合,继续循环对比栈顶元素
C++解法:
The text was updated successfully, but these errors were encountered: